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.