Os Princípios do SOLID — DIP Princípio de inversão de dependência

Jones Roberto Nuzzi
3 min readOct 20, 2019

--

Links dos artigos detalhados:

Finalmente, chegamos a letra D, o último dos 5 princípios.

O princípio da inversão de dependência refere-se à dissociação de módulos de software. Dessa forma, em vez de módulos de alto nível, dependendo de módulos de baixo nível, ambos dependerão de abstrações.

Para cumprir esse princípio, precisamos usar um padrão de design conhecido como padrão de inversão de dependência , geralmente resolvido usando injeção de dependência .
A injeção de dependência é um tópico enorme e pode ser tão complicado ou simples quanto se possa perceber.

Normalmente, a injeção de dependência é usada simplesmente ‘injetando’ quaisquer dependências de uma classe através do construtor da classe ‘como um parâmetro de entrada’.

Para demonstrar isso, vamos à velha escola e dar vida a um computador com Windows com código:

Mas de que serve um computador sem monitor e teclado? Vamos adicionar um de cada um ao nosso construtor para que cada computador Windows que instanciamos venha pré-empacotado com um Monitor e um Keyboard :

Esse código funcionará e poderemos usar o Keyboard e um Monitor livremente em nossa classe WindowsMachine . Problema resolvido? Nem tanto. Ao declarar o Keyboard e o Monitor com a nova palavra-chave, juntamos essas três classes.

Isso não apenas torna o nosso WindowsMachine difícil de testar, mas também perdemos a capacidade de mudar nossa classe Keyboard por outra diferente, caso seja necessário. E também estamos presos à nossa classe Monitor.

Vamos separar nossa máquina do Keyboard adicionando uma interface de teclado mais geral e usando isso em nossa classe:

Aqui, estamos usando o padrão de injeção de dependência para facilitar a adição da dependência do teclado na classe WindowsMachine .

Vamos também modificar nossa classe Keyboard para implementar a interface IKeyboard e a classe Monitor para implementar IMonitor, para que seja adequada para a injeção na classe WindowsMachine :

Agora nossas classes são dissociadas e se comunicam através da abstração do IKeyboard e IMonitor . Se quisermos, podemos mudar facilmente o tipo de teclado e monitor em nossa máquina com uma implementação diferente da interface.

Excelente! Separamos as dependências e estamos livres para testar nosso WindowsMachine com qualquer estrutura de teste que escolhermos.

Conclusão

Nesta série de tutoriais, aprofundamos os princípios do SOLID do design orientado a objetos.

Começamos com uma rápida história do SOLID e as razões por que esses princípios existem.

Letra por letra, detalhamos o significado de cada princípio com um exemplo rápido de código que o viola. Vimos como corrigir nosso código e fazer com que ele aderisse aos princípios do SOLID.

--

--

Jones Roberto Nuzzi

Arquiteto de Sistemas na Riza Asset, Sempre focado em desenvolvimento de sistemas para o mercado financeiro, com mais de 15 anos de experiência!