2
respostas

Ajuda

Srs, boa tarde!

Eu tenho um código que está repetindo em dois métodos, apenas muda o conteúdo da variável.

Alguém poderia dar uma ideia de como isolar esse código em um método? Obrigado.

public function detalhe($id)
      {
         $produto = DB::select('
           SELECT id, 
                   nome, 
                   quantidade, 
                   preco 
           FROM 
             produtos 
           WHERE id = ?', [$id]);      

           **if(empty($produto)):
           $msg = 'Item não possui cadastro';
           return view('produto.msg')->with('msg', $msg);    
         endif;**

         return view('produto.detalhe')->with('produto', $produto[0]);    
      }
public function lista()
      {
         $produtos = DB::select('SELECT id, nome, quantidade, preco FROM produtos');        

         **if(empty($produtos)):
           $msg = 'Lista não possui itens';
           return view('produto.msg')->with('msg', $msg);    
         endif;**    

         return view('produto.lista', ['produtos' => $produtos]);
      }
2 respostas

Oi Leandro, tudo bom?

Muito boa sua iniciativa de desacoplar o código!

Vamos lá, perceba que não temos exatamente o mesmo código. Um método é responsavel por listar todos os produtos, que reflete a query, sem WHERE:

SELECT id, nome, quantidade, preco FROM produtos

E o outro é responsavel por buscar um produto pelo índice. Essa query já tem where:

SELECT id, 
                   nome, 
                   quantidade, 
                   preco 
           FROM 
             produtos 
           WHERE id = ?

Então, nesse caso, por mais que tenhamos o prefixo "select id,nome,quantidade, preco from produtos" em comúm com os dois, temos duas responsabilidades diferentes.

E, segundo o principio de responsabilidade unica de SOLID, é legal a gente manter cada um com a sua responsabilidade, mesmo que nesse caso "repita código".

Espero ter ajudado =)

Caso você queira saber mais sobre SOLID, temos o curso aqui na alura:

https://cursos.alura.com.br/course/orientacao-a-objetos-avancada-e-principios-solid-php

Abraço!

Show. Obrigado.