Tenho lá: Pedido, cliente e endereço. Esse último é agregado de cliente.
Quando cria-se um pedido, os dados sobre o endereço precisa ser mantido, pois o cara pode mudá-lo, removê-lo e etc…
Aí vem o problema: Hoje para carregar os endereços de um cliente XPTO eu uso o lazy loading. Algo como:
Cliente.getEnderecos() {
// acessa o repositório do cliente, busca os endereços agregados e retorna
}
Só, que depois de consumado o pedido, ele precisará buscar o Endereço em outra “tabela”. Isso é tranquilo, poderia ser baseado em status e tal., mas neste caso eu não tenho (ao meu ver) algo para diferenciar o “pega os endereços atuais” do “pega o endereço desse pedido”.
Pensei no seguinte: Cliente.getEnderecoDo(int pedido_id)
Mas acho que isso deixaria meu Cliente “sabendo demais”, ou não ?
— Editado —
Pensando com meus botões aqui, me veio a mente que eu poderia talvez no Pedido.getCliente() pedir ao Repositório do Cliente trazer já o endereço e injetar no cliente. Algo como:
Não vejo problema na forma que você comentou, mas IMHO você precisa ficar atento na forma de você citou pois nesta classe de pedidos seu cliente retorna o endereco de um local persistido (Endereco do pedido), e em outras classes retornara o endereco de outro local (Endereco do cliente) e isso pode acabar gerando uma confusão no futuro (Principalmente se ocorrer do endereco do cliente ser alterado e/ou excluido).
Talvez seria interessante o analisar se a dica do ffranceschi é viavel no seu cenario.
[quote=hlegius]
Opa,
Mas acho que isso quebraria o agregado Cliente -> Endereço, não ?
Abraços,[/quote]
Sim, mas pensando em negócio agora, o Endereço do Cliente é diferente do Endereço do Pedido certo?
Eu sou sempre a favor de manter o design mais simples e intuitivo, isso sim faz toda a diferença…
[quote=ffranceschi][quote=hlegius]
Opa,
Mas acho que isso quebraria o agregado Cliente -> Endereço, não ?
Abraços,[/quote]
Sim, mas pensando em negócio agora, o Endereço do Cliente é diferente do Endereço do Pedido certo?
Eu sou sempre a favor de manter o design mais simples e intuitivo, isso sim faz toda a diferença…[/quote]
Realmente. Entendi seu ponto de vista agora. O endereço continuará sendo acessado por um root (ora Cliente ora Pedido). Seria um aggregado combo hehe =)
Eu foquei “cegamente” no agregado Cliente -> Endereço e não me toquei que pode haver outro agregado (Pedido -> Endereco).
A princípio não ficou tão confuso. O pedido solicitará endereço de um lugar e o cliente de outro. Mas analisando agora com as dicas de vocês realmente fica bem mais simples o relacionamento direto de Pedido -> Endereço e outro entre Cliente e Endereço.