Hail!
Imaginem um cenário onde exite uma relação de 1—*. Como, por exemplo, um Cliente possui N pedidos. Geralmente representamos essa relação dessa forma
[code]public class Cliente {
private Collection<Pedido> pedidos;
}
[/code]
E meu ClienteMapper quando busca do banco recupera as informações do cliente e popula essa collection de Pedido com outra tabela no banco (geralmente utilizando um PedidoMapper).
Agora, imaginem que em um dado momento eu só queira alterar o nome de um usuário. Se meu ClienteMapper já popula a collection de Pedidos eu não teria um overhead?
A solução seria implementar Lazy Load, certo? E, supondo que não esteja utilizando nenhum “framework faz-tudo”, como implementaria isso? Uma maneira que pensei foi adicionar o código
private RepositorioPedido repositorioPedido;
public Collection<Pedido> getPedidos(){
if(pedidos == null)
pedidos = repositorioPedido.buscaPorCliente(getId());
return pedidos;
}
Na minha entidade Cliente. (suponhamos que repositorioPedido seja uma abstração para um Mapper, ou seja, um PedidoMapper implementa esse repositorio).
Será que essa seria a melhor abordagem para implementação de lazy load? Será que não fica complexo ter que gerenciar a dependência criada (um cliente precisaria sempre de uma instancia de repositorioPedido).
Como expor para um cliente (alguem da camada da aplicação) que necessita criar uma instancia da classe Cliente? Disponibilizaria um Builder pra ele? Um Factory?
Não sei se consegui ser claro, mas gostaria de ouvir(ler) a opiniao de vocês!
Valeu!