[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)

Injeção de dependencia x construtor que instancia um objeto

[Finalizado Pelo Aluno]

THAYSON DAVID DA SILVA
Criador THAYSON DAVID DA SILVA 28/10/2021
  1. qual a diferença entre usar a injeção de dependencia do laravel 
  2. public function update(Request $request, Plan $plan)
  3. e usar um construtor instanciando um atributo privado
  4. private $repository;
     
        public function __construct(Plan $plan)
        {
            $this->repository = $plan;
        }
  5. e chamar o mesmo dentro de um método por exemplo o update
Manager Carlos Ferreira 28/10/2021

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.

Carlos Ferreira
Criador THAYSON DAVID DA SILVA 28/10/2021

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?

THAYSON DAVID DA SILVA
Manager Carlos Ferreira 28/10/2021

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?

Carlos Ferreira
Criador THAYSON DAVID DA SILVA 28/10/2021

compriendi, debuguei com o helper dd(); dentro do construtor

 

THAYSON DAVID DA SILVA
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!