Lazy Load

Nesta aula você irá aprender como fazer objetos encadeados e com carregamento por demanda.

assinaturaAssine nossa Comunidade

Web Forms -Lazy Load

A Técnica que mostraremos nessa aula é utilizada em várias linguagens, sejam elas C#,Java, Phyton, PHP, Ruby, etc. que permite utilizar dados sob demanda, buscar exatamente o que precisamos, na hora em que precisamos. Essa técnica chama-se Lazy Load.

Faremos um exemplo criando algumas tabelas no banco de dados para que possamos entender o porquê essa técnica pode ser interessante para ter mais performance no seu sistema.

Vamos criar as tabelas de Cliente, Pedido, Produto, PedidoProduto e Fornecedor no banco de dados, com os campos:

  • Cliente
    Id
    Nome
  • Pedido
    IdCliente
    ValorTotal
  • Fornecedor
    Id
    Nome
  • Produto
    Nome
    Valor
    IdFornecedor

Precisamos saber que um pedido terá um ou vários produtos e um produto vai sair em um ou vários pedidos.

Quando temos esse cenário, precisamos criar uma tabela auxiliar que liga o Pedido ao Produto

  • PedidoProduto
    IdPedido
    IdProduto

Será feita uma busca no banco de dados para trazer todos os produtos de um pedido.

Então, na classe Pedido, criamos a propriedade produtos, que é do tipo List< Produto> . Nesta variável vamos armazenar todos os produtos de um determinado pedido, através da tabela PedidoProduto.

    
      public class Pedido
      {
        public int Id;
        public int IdCliente;
        public ValorTotal;
        private Cliente cliente;
        private List< Produto> produtos;

        public List< Produto> produtos
        {
          get 
          {
            if(produtos != null) return produtos;
            produtos = Produto.BuscaPorPedidoId(this.Id);
            return produtos;
          }
        }

        public Cliente cliente
        {
          get 
          {
            if(cliente != null) return cliente;
            cliente = Cliente.BuscaPorId(this.IdCliente);
            return cliente;
          }
        }
      }  
     
  

Na classe Produto, temos o método BuscaPorPedidoId,que irá na classe Database para fazer o relacionamento entre as tabelas Pedido e PedidoProduto que irá retornar a lista de Produtos do idPedido passado por parâmetro.

  
    public class Produto
    {
      public int Id;
      public string Nome;
      public double Valor;
      public int IdFornecedor;
      private Fornecedor fornecedor;

      public Fornecedor fornecedor
      {
        get 
        {
          if(clifornecedorente != null) return fornecedor;
          fornecedor = Fornecedor.BuscaPorId(this.IdFornecedor);
          return fornecedor;
        }
      }

      public static List< Produto> BuscaPorPedidoId(int IdPedido)
      {
        var produtos = new List< Produto>();
        var dados = Database.Produto.BuscaPorPedidoId(IdPedido);
        foreach(DataRow row in dados.Rows)
        {
          var produto = new Produto();
          produto.Id = int.Parse(row["idProduto"].ToString());
          produto.Nome = row["nome"].ToString();
          produto.IdFornecedor = int.Parse(row["IdFornecedor"].ToString());
          produto.Valor = double.Parse(row["valor"].ToString());
          produtos.Add(produto);
        }
        return produtos;
      }
    }  
   

No método main da aplicação vamos chamar os métodos Busca e BuscaPorPedidoId através da instância da classe Pedido para fazer uma Busca encadeada dos produtos e do nome do cliente .

Uma vez que a instância o objeto estiver preenchida, não iremos mais buscar no banco de dados ou seja, através do Lazy Load, acessamos a propriedade Produtos, buscando os dados no banco de dados, que é feito o vínculo da tabela Pedido com PedidoProduto.

  
    public class Program
    {
      public static void Main(string[] args)
      {
        var pedidos = Pedido.Busca();
        
        var pedido = pedidos[0];

        var nomeCliente = pedido.Cliente.Nome;
        
        var produtos = pedido.Produtos[0].Fornecedor.Nome;

        Console.WriteLine("Hello Word");
      }
    }  
   

Também utilizamos a Tecnica do Lazy Load quando acessamos o nome do Fornecedor através da classe Produto.

Lazy Load

Nesta aula você irá aprender como fazer objetos encadeados e com carregamento por demanda.

Próximas Aulas:
assinaturaAssine nossa Comunidade

Web Forms -Lazy Load

A Técnica que mostraremos nessa aula é utilizada em várias linguagens, sejam elas C#,Java, Phyton, PHP, Ruby, etc. que permite utilizar dados sob demanda, buscar exatamente o que precisamos, na hora em que precisamos. Essa técnica chama-se Lazy Load.

Faremos um exemplo criando algumas tabelas no banco de dados para que possamos entender o porquê essa técnica pode ser interessante para ter mais performance no seu sistema.

Vamos criar as tabelas de Cliente, Pedido, Produto, PedidoProduto e Fornecedor no banco de dados, com os campos:

  • Cliente
    Id
    Nome
  • Pedido
    IdCliente
    ValorTotal
  • Fornecedor
    Id
    Nome
  • Produto
    Nome
    Valor
    IdFornecedor

Precisamos saber que um pedido terá um ou vários produtos e um produto vai sair em um ou vários pedidos.

Quando temos esse cenário, precisamos criar uma tabela auxiliar que liga o Pedido ao Produto

  • PedidoProduto
    IdPedido
    IdProduto

Será feita uma busca no banco de dados para trazer todos os produtos de um pedido.

Então, na classe Pedido, criamos a propriedade produtos, que é do tipo List< Produto> . Nesta variável vamos armazenar todos os produtos de um determinado pedido, através da tabela PedidoProduto.

    
      public class Pedido
      {
        public int Id;
        public int IdCliente;
        public ValorTotal;
        private Cliente cliente;
        private List< Produto> produtos;

        public List< Produto> produtos
        {
          get 
          {
            if(produtos != null) return produtos;
            produtos = Produto.BuscaPorPedidoId(this.Id);
            return produtos;
          }
        }

        public Cliente cliente
        {
          get 
          {
            if(cliente != null) return cliente;
            cliente = Cliente.BuscaPorId(this.IdCliente);
            return cliente;
          }
        }
      }  
     
  

Na classe Produto, temos o método BuscaPorPedidoId,que irá na classe Database para fazer o relacionamento entre as tabelas Pedido e PedidoProduto que irá retornar a lista de Produtos do idPedido passado por parâmetro.

  
    public class Produto
    {
      public int Id;
      public string Nome;
      public double Valor;
      public int IdFornecedor;
      private Fornecedor fornecedor;

      public Fornecedor fornecedor
      {
        get 
        {
          if(clifornecedorente != null) return fornecedor;
          fornecedor = Fornecedor.BuscaPorId(this.IdFornecedor);
          return fornecedor;
        }
      }

      public static List< Produto> BuscaPorPedidoId(int IdPedido)
      {
        var produtos = new List< Produto>();
        var dados = Database.Produto.BuscaPorPedidoId(IdPedido);
        foreach(DataRow row in dados.Rows)
        {
          var produto = new Produto();
          produto.Id = int.Parse(row["idProduto"].ToString());
          produto.Nome = row["nome"].ToString();
          produto.IdFornecedor = int.Parse(row["IdFornecedor"].ToString());
          produto.Valor = double.Parse(row["valor"].ToString());
          produtos.Add(produto);
        }
        return produtos;
      }
    }  
   

No método main da aplicação vamos chamar os métodos Busca e BuscaPorPedidoId através da instância da classe Pedido para fazer uma Busca encadeada dos produtos e do nome do cliente .

Uma vez que a instância o objeto estiver preenchida, não iremos mais buscar no banco de dados ou seja, através do Lazy Load, acessamos a propriedade Produtos, buscando os dados no banco de dados, que é feito o vínculo da tabela Pedido com PedidoProduto.

  
    public class Program
    {
      public static void Main(string[] args)
      {
        var pedidos = Pedido.Busca();
        
        var pedido = pedidos[0];

        var nomeCliente = pedido.Cliente.Nome;
        
        var produtos = pedido.Produtos[0].Fornecedor.Nome;

        Console.WriteLine("Hello Word");
      }
    }  
   

Também utilizamos a Tecnica do Lazy Load quando acessamos o nome do Fornecedor através da classe Produto.