Nesta aula você irá aprender como fazer objetos encadeados e com carregamento por demanda.
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:
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
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.
Nesta aula você irá aprender como fazer objetos encadeados e com carregamento por demanda.
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:
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
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.