Actualizar una entidad dentro de un agregado

Estaba leyendo una pregunta similar sobre SO: Cómo actualizar una entidad dentro de Aggregate, pero todavía no estoy seguro de cómo una interfaz de usuario debería interactuar con entidades dentro de un agregado.

Digamos que tengo unaUser, con un montón deAddresses. El usuario es la raíz agregada, mientras que la Dirección solo existe dentro del agregado.

En una interfaz web, un usuario puede editar sus direcciones. Básicamente, lo que sucede es:

El usuario ve una lista de direcciones en su interfaz webHaga clic en una dirección y se le redirige a esta página:edit-address?user=1&address=2En esta página, obtiene un formulario donde puede modificar esta dirección.

I decidimos omitir la raíz agregada, esto sería sencillo:

Cargaríamos directamente elAddress con suId Lo actualizaríamos, luego lo guardaríamos

Porque queremos hacerlo a la manera DDD, tenemos diferentes soluciones:

O nosotrospida al usuario que obtenga esta dirección por Id:

address = user.getAddress(id);
address.setPostCode("12345");
address.setCity("New York");
em.persist(user);

El problema con este enfoque es, en mi opinión, que la raíz agregada aún no tiene mucho más control sobre lo que se hace con la dirección. Simplemente devuelve una referencia, por lo que no es muy diferente de omitir el agregado.

O nosotrostell el agregado para actualizar una dirección existente:

user.updateAddress(id, "12345", "New York");
em.persist(user);

Ahora el agregado tiene control sobre lo que se hace con esta dirección, y puede tomar las medidas necesarias para actualizar una dirección.

O tratamos la Dirección como unvalue object, y no actualizamos nuestraAddress, sino más bien eliminarlo y recrearlo:

user.removeAddress(id);
address = new Address();
address.setPostCode("12345");
address.setCity("New York");
user.addAddress(address);
em.persist(user);

Esta última solución parece elegante, pero significa que una Dirección no puede ser una Entidad. Entonces, ¿qué pasa si necesita sertratado como una entidad, por ejemplo, porque otro objeto de negocio dentro del agregado tiene una referencia a él?

Estoy bastante seguro de que me falta algo aquí para comprender correctamente el concepto agregado y cómo se usa en ejemplos de la vida real, ¡así que no dude en dar sus comentarios!

Respuestas a la pregunta(1)

Su respuesta a la pregunta