Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Lazy loading

Srs, bom dia!

Eu estou com uma duvida conceitual do que é o Lazy Loading e quais são os benefícios de usa-lo? Seria apenas boa prática? Como o uso de Design Patterns?

Aproveitando os conhecimentos de O.O dos cursos anteriores de PHP. No ultimo exercício eu fiz um pouco diferente, eu gostaria de saber se o que eu fiz pode ser considerado um lazy loading. Obrigado.

class Categoria
  {
      private $id;
      private $nome;
      private $erro;
        private $conexao;
      **private $produto;**

      public function __construct($nome)
      {
        $this->nome = $nome;
        $this->erro = new Erro();    
         $this->conexao = Conexao::connect();      
         **$this->produto = new Produto("","","","");**
      }

       public function getProduto()
      {
        return $this->produto;  
      }

    class Produto
  {
      private $id;
      private $nome;
      private $preco;
      private $qtd;
      private $categoria;
      private $conexao;

      **public function listForCategory(Categoria $categoria)
    {
      $produtos = array();

      $query = "SELECT p.id, p.nome FROM produtos as p 
                WHERE categoria_id = :id";

      $stmt = $this->conexao->prepare($query);
      $stmt->bindValue(':id', $categoria->getId());
      $stmt->execute();
      $result = $stmt->fetchAll();

      foreach($result as $item):
        $produto = new Produto($item['nome'], "", "", "");
        $produto->setId($item['id']);
        array_push($produtos, $produto);  
      endforeach;            

      return $produtos;
    }**

   $categoria = new Categoria("");
  $categoria->setId($_GET['id']);
  $categoria->seek($categoria);  
 ** $produtos = $categoria->getProduto()->listForCategory($categoria);**
2 respostas
solução!

Oi Leandro, tudo bom?

O processo de lazy load consiste em trazer o minimo de informação necessário sobre uma instancia do seu banco e só busca-la completamente quando alguém for utilizar.

No nosso caso, estamos puxando uma categoria apenas com os ids e nomes dos produtos relacionados a ela. Só buscamos o produto inteiro quando necessário.

No seu exemplo, temos um ponto um pouco estranho:

$categoria->getProduto()->listForCategory($categoria)

Aqui, chamamos de $categoria o get produto que por sua vez possui um método listForCategory que recebe a propria $categoria. Poderiamos ter reduzido isso para:

$categoria->getProduto();

// na declaração do getProduto()
public function getProduto(){
$this->produto->listForCategory($this);
// resto do método
}

Assim a chamada do método fica mais clara e o carregamento lazy ocorre da mesma forma =)

Abraço.

Oi Andre! Blz. O conceito está claro. Obrigado mais uma vez. =)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software