Injeção de dependencia x construtor que instancia um objeto
[Finalizado Pelo Aluno]
-
qual a diferença entre usar a injeção de dependencia do laravel
-
public function update(Request $request, Plan $plan)
- e usar um construtor instanciando um atributo privado
-
private $repository;public function __construct(Plan $plan){$this->repository = $plan;}
- e chamar o mesmo dentro de um método por exemplo o update
Olá, Thayson!
Tudo bem?
O recurso de injeção de dependências (DI) do Laravel para mim é uma das coisas mais incríveis do framework, a primeira vez que tive contato fiquei em um limbo me perguntando e questionando como o FW consegue fazer isso!?!
Sobre usar o recurso de DI, a resposta é simples, DI torna o código mais enxuto.
Sem DI:
public function show()
{
$plan = new Plan;
dd($plan);
}
Com DI
public function show(Plan $plan)
{
dd($plan);
}
---
Sobre a sua pergunta, qual a diferença de fazer no construtor, ou injetar no método?
A resposta também é simples, e respondo com uma pergunta: Vai usar essa instância da classe em vários métodos da classe?
Sim? Então injeta no controller, porque assim só cria a instância uma única vez.
Não? Então injeta no método que vai usar.
Boa noite,
então se injetar no controle atraves do construtor eu vou criar apenas uma instancia do objeto enquanto se fizer a injeção de dependencia, em cada método eu crio uma nova instancia, é isso?
e quanto a consulta no banco de dados não vai mudar nada pois a injeção de dependencia faz a mesma coisa que buscar um objeto por id por exemplo, certo?
Nesse ponto entra um dos fundamentos da orientação a objetos. Quando cria cria algo no construtor o que acontece? Sempre que chamar qualquer método daquela classe automaticamente passa (primeiro) pelo construtor, portanto, se injetar algo no construtor, sempre que usar qualquer método da classe vai passar pelo construtor.
Reforçando a ideia, vai usar a instância de algo em vários métodos da classe?
Sim, então deixa no construtor.
Não? Então injeta no método que vai usar.
Ficou claro amigo?
compriendi, debuguei com o helper dd(); dentro do construtor
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!