Qual é uma boa maneira de explicar a injeção de dependência ?
Encontrei vários tutoriais no Google, mas nenhum deles que suponha que o leitor é apenas um iniciante em Java. Como você explicaria isso a um novato?
Qual é uma boa maneira de explicar a injeção de dependência ?
Encontrei vários tutoriais no Google, mas nenhum deles que suponha que o leitor é apenas um iniciante em Java. Como você explicaria isso a um novato?
Respostas:
Dou injeção de dependência para crianças de cinco anos.
fonte
Que tal isso?
Se você tem uma classe
Employee
e esse funcionário tem uma,Address
você podeEmployee
defini-la da seguinte maneira:Tudo parece bem até agora.
Este código mostra um relacionamento HAS-A entre o funcionário e o endereço dele, tudo bem.
Agora, esse relacionamento HAS-A criou uma dependência entre eles. O problema vem dentro do construtor.
Cada vez que você deseja criar uma
Employee
instância, você precisa de umaAddress
instância:Trabalhar dessa maneira se torna problemático, especialmente quando você deseja executar testes de unidade.
O principal problema vem quando você precisa testar um determinado objeto, você precisa criar uma instância de outro objeto, e, provavelmente, você precisa criar uma instância de ainda outra objeto para fazer isso. A corrente pode se tornar incontrolável.
Para evitar isso, você pode alterar o construtor assim:
Usando um construtor no args.
Depois, você pode definir o endereço quando quiser:
Agora, isso pode ser uma chatice, se você tiver vários atributos ou se for difícil criar objetos.
No entanto, pense sobre isso, digamos, você adiciona o
Department
atributo:Se você possui 300 funcionários e todos precisam ter o mesmo departamento, e mais esse mesmo departamento precisa ser compartilhado entre outros objetos (como a lista de departamentos da empresa ou as funções de cada departamento, etc.), você tenha dificuldade com a visibilidade do
Department
objeto e compartilhe-o através de toda a rede de objetos.O que é a Injeção de Dependências para ajudar você a "injetar" essas dependências no seu código. A maioria das estruturas permite que você faça isso especificando em um arquivo externo qual objeto deve ser injetado.
Suponha um arquivo de propriedades para um injetor de dependência fictício:
Você definirá o que injetar para um determinado cenário.
O que a estrutura do Injector de Dependência fará é definir os objetos corretos para você, para que você não precise codificar
setAddress
ousetDepartment
. Isso seria feito por reflexão ou por geração de código ou outras técnicas.Portanto, da próxima vez que você precisar testar a
Employee
classe, poderá injetar simulaçãoAddress
eDepartments
objetos sem precisar codificar todo o conjunto / obter para todo o seu teste. Ainda melhor, você pode injetar objetos reaisAddress
eDepartment
no código de produção e ainda ter a confiança de que seu código funciona como testado.É praticamente isso.
Ainda não acho que essa explicação seja adequada para crianças de 5 anos, conforme solicitado.
Espero que você ainda ache útil.
fonte
Ao escrever uma classe, é natural que ela faça uso de outros objetos. Você pode ter uma conexão com o banco de dados, por exemplo, ou algum outro serviço que você usa. Esses outros objetos (ou serviços) são dependências. A maneira mais simples de escrever o código é simplesmente criar e usar esses outros objetos. Mas isso significa que seu objeto tem um relacionamento inflexível com essas dependências: não importa por que você esteja chamando seu objeto, ele usa as mesmas dependências.
Uma técnica mais poderosa é poder criar seu objeto e fornecer dependências para ele usar. Portanto, você pode criar uma conexão com o banco de dados para usá-la e entregá-la ao seu objeto. Dessa forma, você pode criar seu objeto com diferentes dependências em momentos diferentes, tornando seu objeto mais flexível. Isso é injeção de dependência, onde você "injeta" as dependências no objeto.
BTW: No estilo moderno de apresentação do uso de fotos do flickr para ilustrar conceitos, isso pode ser ilustrado com um viciado em drogas. Oh, espere, isso é dependência de injeção ... OK, desculpe, piada de mau gosto.
fonte
Não conheço nenhum tutorial simplificado, mas posso fornecer uma versão de quase
25palavras ou menos:Com a injeção de dependência, um objeto não configura seus próprios componentes com base em coisas que já conhece, mas o objeto é configurado por uma lógica de nível superior e, em seguida, chama componentes dos quais não tinha conhecimento prévio incorporado. A idéia é tornar o objeto mais de um componente e menos de um aplicativo, realocando tarefas de configuração em um nível superior. Isso aumenta a probabilidade de o objeto ser útil no futuro ou com uma configuração diferente.
É melhor para testes, é melhor quando chega a hora de revisar o aplicativo. Uma implementação típica coloca a configuração em XML e usa uma estrutura para carregar dinamicamente classes.
fonte
Ao receber um novo Nintendo, você pode simplesmente usar os botões e a tela sensível ao toque para jogar.
Mas na fábrica da Nintendo, eles precisam saber como montar um.
Quando as pessoas inteligentes da fábrica lançarem um Nintendo DS, será diferente por dentro, mas você ainda saberá como usá-lo.
fonte