Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida sobre a injeção de dependências

Considerando o cenário montado durante o curso:

A classe BalancoEmpresa recebe um instância de ArmazenadorDados via construtor afim de desacoplar a classe BalancoEmpresa de qualquer implementação específica de ArmazenadorDados.

public class BalancoEmpresa {
      private ArmazenadorDados dividas;

      public BalancoEmpresa(ArmazenadorDados dividas){
             this.dividas = dividas;
      }

     //restante do código
}
public interface ArmazenadorDados{
    //métodos abstratos da interface
}

A classe MinhaAplicacao (ou qualquer outra classe cliente de BalancoEmpresa) fica então responsável por criar uma instância de ArmazenadorDados quando precisar de uma instância de BalancoEmpresa.

public class MinhaAplicacao{
    public static void main(String [] args){
        ArmazenadorDados ad = //instancia ArmazenadorDados de alguma maneira

//Aqui a dependencia é resolvida e injetada...
        BalancoEmpresa balanco = new BalancoEmpresa(ad); 
    }
}

Expondo dessa maneira os detalhes de implementação da classe BalancoEmpresa (tornando público o fato de que ela utiliza de um ArmazenadorDados para realizar suas tarefas) não estamos quebrando o encapsulamento ????

Em caso positivo, como escolher entre manter o encapsulamento ou ganhar flexibilidade de comportamento usando a injeção de dependências???

2 respostas
solução!

Ótima pergunta, Yago!

A meu ver, não há quebra de encapsulamento pois você fica sabendo que a classe precisa de um ArmazenadorDeDados, mas não fica sabendo qual ela precisa nem como vai usar. Seria quebra de encapsulamento se você soubesse esse "como".

Obrigado pela resposta Luiz.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software