Atualize uma entidade dentro de um @ agrega
Eu estava lendo uma pergunta semelhante no SO:Como atualizar uma entidade dentro do Aggregate, mas ainda não tenho certeza de como uma interface do usuário deve interagir com entidades dentro de um agregad
Digamos que eu tenho umUser
, com um monte deAddress
es. Usuário é a raiz agregada, enquanto Endereço existe apenas dentro da agregaçã
Em uma interface da Web, um usuário pode editar seus endereços. Basicamente, o que acontece é:
O usuário vê uma lista de endereços em sua interface da webEle clica em um endereço e é redirecionado para esta página:edit-address?user=1&address=2
Nesta página, ele obtém um formulário no qual pode modificar esse endereçI decidimos ignorar a raiz agregada, isso seria simples:
Carregaríamos diretamente oAddress
com o seuId
Nós atualizá-lo e salvá-loPor que queremos fazer isso da maneira DDD, temos soluções diferentes:
Nós tamb peça ao usuário para obter este endereço por Id:
address = user.getAddress(id);
address.setPostCode("12345");
address.setCity("New York");
em.persist(user);
O problema dessa abordagem é que a raiz agregada ainda não tem muito mais controle sobre o que é feito com o endereço. Ele apenas retorna uma referência a ele, portanto não é muito diferente de ignorar o agregad
Ou nós diga ao agregado para atualizar um endereço existente:
user.updateAddress(id, "12345", "New York");
em.persist(user);
gora, o agregado tem controle sobre o que é feito com esse endereço e pode executar qualquer ação necessária com a atualização de um endereç
Or tratamos o endereço como umvalue object e não atualizamos nossaAddress
, mas sim exclua e recrie:
user.removeAddress(id);
address = new Address();
address.setPostCode("12345");
address.setCity("New York");
user.addAddress(address);
em.persist(user);
Esta última solução parece elegante, mas significa que um Endereço não pode ser uma Entidade. Então, e se precisar serratado como uma entida, por exemplo, porque outro objeto de negócios no agregado tem uma referência a el
Tenho certeza de que estou perdendo alguma coisa aqui para entender corretamente o conceito agregado e como ele é usado em exemplos da vida real, por isso, não hesite em comenta