Como eu faço o esse diagrama de domínio?

Oi gente, é o seguinte: eu tenho uma entidade cliente. Nessa entidade existe o atributo endereço.
endereço é outra entidade, responsável pela informação de endereço (duhrrr). O problema é que o cliente possui vários tipos de endereço:

  • Endereço da sede;
  • Endereço de entrega
  • Endereço de responsável
    e por ai vai. Só que todos os endereços possuem a mesma estrutura.
    No código, ficaria assim:
public class Cliente
{
   ....
   Endereço endereçoSede;
   List<Endereço> endereçoEntrega;
   List<Endereço> endereçoResponsável
   ....
}

Então, como ficaria isso no diagrama de domínio?

Vish… acho que isso tem vários jeitos de fazer… escolha o melhor… Alguns que eu faria… sei lá:

1 - Criar uma entidade TipodeEndereco (codigo, descricao) e referenciar na entidade endereço
2 - Criar um MAP na Entidade endereço MAP<String, String>… dai vc adiciona endereco_residencial, blablablabla
3 - Criar hierarquicamente… extends…

Agora depende do que vc vai fazer com isso… Se for persistir o mais facil acho que é criar uma tabela tipodeendereço e fazer aquele mapeamento que falei… Sei la… talvez isso te ilumine

So que presta atenção na sua modelagem… endereço de entrega é do cliente??? No caso seria um pedido ou coisa assim certo?? Endereço da sede tbm é do cliente???

Talvez a própria entidade Endereço já resolveu tudo e vc só tem que colocar a referencia nas entidades certas

Ontem a tardezinha eu estava pensando nisso e cheguei na sua conclusão do tipo de endereço.

Cara, quando a sua pergunta, olha só como é que é: digamos que vc tem uma empresa, com sede num lugar, mas o aumox da empresa é em outro. Por isso ter o endereço da sede e de entrega.

Mas valeu, o tipo de endereço é a melhor forma mesmo.

Ah, sim, isso é persistido em banco

[quote=osmio]Aplicando este teu conceito de TipoDeEndereco nas entidades Endereco, dentro do Cliente voce possuiria uma lista de Endereços correto?

No caso de querer identificar o EnderecoDeEntraga, teria que percorrer toda a lista?

Humm…

Veja isso:

for (Endereco end : cliente.getEnderecos()) {
  if (end.getTipo().equals("ENTREGA") {
      // achei o endereco que eu queria
  }
}

Se for isso, não faz nenhum sentido para mim.

[/quote]

Realmente seria algo custoso.
Se for pensar OO, voce poderia criar vários EnderecosXXVO que estendessem de um Endereco, nao lembro se isso quebra alguma regra ou padrao.
Mas se os Endereços podem passar por operacoes de CRUD, acho que estabelecer um Tipo é uma opção viável.

Se o teu negócio exige que a entidade cliente tenha UM endereço de sede, vários endereços de entrega e vários endereços de responsável, o teu primeiro post é o mais correto ao meu ver.

[quote=osmio][quote=A.L]
Realmente seria algo custoso.
Se for pensar OO, voce poderia criar vários EnderecosXXVO que estendessem de um Endereco, nao lembro se isso quebra alguma regra ou padrao.
Mas se os Endereços podem passar por operacoes de CRUD, acho que estabelecer um Tipo é uma opção viável.[/quote]

O problema não é o Tipo, e sim o custo de identificação.
Não sei qual o escopo da aplicação, mas imagine um cenário:

  • O cliente possui:
  • Endereco da sede;
  • Endereco de cobranca;
  • Endereco de entrega;
  • Endereco de correspondencia;
  • Endereco de visita comercial;
  • Endereco de visita técnica;
  • Endereco de entrega 2;
  • Endereco de entrega 3;
  • Outros enderecos…;

Nesse cenário, o cliente possui diversos enderecos. Deveria percorrer a lista até encontrar o endereco de entrega. Porém, possuo 3 enderecos de entrega cadastrados. Fico ainda em dúvida de qual deles é o correto.

Na minha opinião, EnderecoDeEntrega não faz parte de Cliente. Mas sim de Pedido por exemplo.

O cliente deve sim possuir a lista de endereços com seus respectivos tipos. O Pedido, sempre será de um cliente, e dentre todos os endereços do tipo ENTREGA do cliente, deverá ser escolhido um.

Mesmo assim, uma lista sequencial, nesse caso, não seria a melhor opção.[/quote]

Sim, tem razão nessa idéia, por conta da mistura de Endereços desnecessários e que talvez fugissem da situação (buscar soh Endereços de Entrega).

Mas levando em conta apenas modelo de domínio, nao pensando em modelo de dados, criar um VO para cada tipo de Endereço seria boa opção então? Esse VO se agregaria onde fosse necessário, seja no Cliente, no Pedido, na Entrega…etc.

O que me diz?

Aplicando este teu conceito de TipoDeEndereco nas entidades Endereco, dentro do Cliente voce possuiria uma lista de Endereços correto?

No caso de querer identificar o EnderecoDeEntraga, teria que percorrer toda a lista?

Humm…

Veja isso:

for (Endereco end : cliente.getEnderecos()) {
  if (end.getTipo().equals("ENTREGA") {
      // achei o endereco que eu queria
  }
}

Se for isso, não faz nenhum sentido para mim.

[quote=A.L]
Realmente seria algo custoso.
Se for pensar OO, voce poderia criar vários EnderecosXXVO que estendessem de um Endereco, nao lembro se isso quebra alguma regra ou padrao.
Mas se os Endereços podem passar por operacoes de CRUD, acho que estabelecer um Tipo é uma opção viável.[/quote]

O problema não é o Tipo, e sim o custo de identificação.
Não sei qual o escopo da aplicação, mas imagine um cenário:

  • O cliente possui:
  • Endereco da sede;
  • Endereco de cobranca;
  • Endereco de entrega;
  • Endereco de correspondencia;
  • Endereco de visita comercial;
  • Endereco de visita técnica;
  • Endereco de entrega 2;
  • Endereco de entrega 3;
  • Outros enderecos…;

Nesse cenário, o cliente possui diversos enderecos. Deveria percorrer a lista até encontrar o endereco de entrega. Porém, possuo 3 enderecos de entrega cadastrados. Fico ainda em dúvida de qual deles é o correto.

Na minha opinião, EnderecoDeEntrega não faz parte de Cliente. Mas sim de Pedido por exemplo.

O cliente deve sim possuir a lista de endereços com seus respectivos tipos. O Pedido, sempre será de um cliente, e dentre todos os endereços do tipo ENTREGA do cliente, deverá ser escolhido um.

Mesmo assim, uma lista sequencial, nesse caso, não seria a melhor opção.

[quote=A.L]
Mas levando em conta apenas modelo de domínio, nao pensando em modelo de dados, criar um VO para cada tipo de Endereço seria boa opção então? Esse VO se agregaria onde fosse necessário, seja no Cliente, no Pedido, na Entrega…etc.
O que me diz?[/quote]

Não vejo necessidade de criação de vários VO´s uma vez que o endereço de entrega vai possuir os mesmos dados do endereço de correspondência. Vejas alguns possíveis atributos:

Endereco

  • rua;
  • numero;
  • bairro;
  • cidade;
  • estado;
  • cep;
  • outros atributos de um endereço;

Esses atributos são suficientes para qualquer Tipo de endereço.
A extensão aqui não faria sentido, já que voce não tem atributos específicos de um endereço de entrega.