Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunofreixo

Injeção de Dependência

Recommended Posts

Olá pessoal!

Estou com uma dúvida conceitual com relação ao uso de Injeção de Dependência.

 

Tenho duas classes (Usuario e Endereco).

A classe Endereco é dependente da classe Usuario.

Sendo assim, amarro o Usuário no construtor da classe Endereco.

 

Até aí, tudo bem.

Só que na hora que eu instancio a classe Endereco, para que o código não dê erro, sou obrigado a instanciar também a classe Usuario.

 

Oras, o padrão DI não existe justamente para evitar uma instância desnecessária no construtor ou num método setter?

Pelo que eu vejo, eu deixo de instanciar no construtor da classe dependente, porém não deixo de instanciar num outro componente quando for usá-lo.

 

Segue código abaixo:

<?php

// classe Usuario
class Usuario {}

// classe Endereco
class Endereco {
   public function __construct(Usuario $usuario) {
      $this->usuario = $usuario;
   }
}

// arquivo de instancia
$usuario = new Usuario(); // essa instância é que não faz sentido para mim...
$endereco = new Endereco($usuario);
?> 

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade a Injeção de Dependência serve para evitar o acoplamento nas classes porém ele gera este problema de ter que instanciar vários objetos para passar como parâmetro, é aí que entra outro pattern chamado de Dependency Injection Container. Tem um bem conhecido que é o pimple ou pode criar o seu.

 

http://pimple.sensiolabs.org/

 

Só uma observação: O mais correto não seria sua classe Usuario ter um atributo do tipo Endereco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rockrgo, muito obrigado pelas explicações!

Você está certo, é Usuário que tem que ter Endereco. Na verdade como adaptei na pressa, essas são classes fictícias bem simples que criei baseadas em duas classes de um projeto real que estou tendo este mesmo problema...

 

William Duarte, muito obrigado também pelo "toque de elegância"! ;)

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.