SOLID , Shazam da orientação a objetos? — Parte 5

Thiago Chagas
Nov 12, 2019 · 4 min read

E aí pessoal,tudo bem com vocês? Voltamos para a quinta e última parte da série SOLID,”O Shazam da Orientação a objeto” para que tenhamos boas práticas de programação na construção dos nossos códigos.Não conseguiu acompanhar a série? Fique despreocupado, não desligue o freezer, que aqui estão os links das partes anteriores: parte 1, parte 2 , parte 3 e parte 4.E hoje vamos falar sobre o DIP ou Inversão de dependência (Dependency Inversion Principle) conhecido também como Inversão de controle ou injeção de dependência.

Mas o que diz este princípio??

Os sistemas mais flexíveis são aqueles em que as dependências de código-fonte se referem apenas as abstrações e não a items concretos, ou seja módulos de alto nível não devem depender de módulos de baixo nível.

Um exemplo que ratificaria esta frase seria o seguinte. Imaginem que temos uma classe para cadastro de produtos.Esta classe nunca deve depender da classe que fará a inserção de dados no banco.Caso isso aconteça, está sendo criado um acoplamento,então deveríamos depender de uma abstração dessa classe que faz a inserção de dados.Sabendo-se disso, o mantra para a Injeção de dependência é o seguinte:

Dependa sempre da abstração, e nunca da implementação”.

Quando você abstrai, tudo fica mais bonito,elegante,testável e principalmente , mais fácil de dar manutenção.

A injeção de dependência pode ser feita de várias formas, e algumas delas são:

  • Injeção por Construtor
  • Injeção por Propriedades Getter e Setter
  • Injeção por Método
  • Injeção por Service Locator

DIP por Construtor

Implementa-se a injeção de dependência nos construtores das classes.Usada quando uma classe requer uma ou mais dependências.

Neste exemplo temos um repositório de Cliente que necessita de um “ContextoDeDados” para efetuar as operações de persistência de dados.
Injetamos esta “necessidade” pelo construtor da própria classe.

DIP por Propriedades Getter e Setter

A implementação é feita nas definições de get e set das classes. Recomendada quando a classe tem dependências que são opcionais.

Neste exemplo,fornecemos um objeto de dependência por uma propriedade pública da classe “ClienteNegocio”.

DIP por Método

Implementação da injeção de dependência em um método e geralmente para ser usado nele mesmo.Recomendado quando a classe não necessariamente precisa da dependência mas apenas um método precisa.

No exemplo acima a classe tem uma propriedade pública do tipo “IServico”. Como apenas o método tem a dependência desta interface e não a classe inteira, fazemos a injeção no próprio método que necessita dela.

DIP por Service Locator

Nesta implementação por Service Locator, uma classe que tem um objeto filho,irá utilizar uma classe “Fábrica” que retornará a instância correta para o filho.

A classe “CriadorDeObjetos” contém um método que retorna uma instância de um “ClienteRepositorio” e classe “ClienteServico” contém uma propriedade do tipo “IClienteRepositorio” (objeto filho) e dentro do construtor, chama a classe “CriadorDeObjetos” para recuperar a instância correta e resolver a dependência.

A resolução de dependência mais usada é pelos Construtores. Existem vários Frameworks de resolução como Unity, Castle Windsor, StrutureMap, Ninject e Spring.NET, ou se preferir, podemos usar o próprio serviço padrão de resolução de dependência do AspNet Core.

Chegamos ao final da série Solid, o Shazam da Orientação a objeto.

Espero que os artigos tenham ajudado a todos .Lembrem-se que um conhecimento sólido de orientação à objetos e a aplicação dos padrões do SOLID faz com que consigamos resolver os problemas usando a O.O. de verdade criando assim códigos melhores e legíveis.

Até os próximos artigos pessoal!

Thiago Chagas

Written by

Microsoft Technology Associate (MTA), .Net Developer at Radix

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade