Estoy comenzando con DDD y entiendo que las raíces agregadas se utilizan para garantizar la coherencia transnacional. No debemos modificar múltiples agregados en un servicio de aplicación.
Sin embargo, me gustaría saber cómo lidiar con la siguiente situación.
Tengo una raíz agregada llamada Productos.
También hay una raíz agregada llamada Grupo.
Ambos tienen Id, y se pueden editar de forma independiente.
Varios productos pueden apuntar al mismo grupo.
Tengo un servicio de aplicación que puede cambiar el grupo de un producto:
ProductService.ChangeProductGroup(string productId, string groupId)
- Comprobar grupo existe
- Obtener producto del repositorio
- Establecer su grupo
- Escriba el producto nuevamente en el repositorio
También tengo un servicio de aplicación donde se puede eliminar el grupo:
GroupService.DeleteGroup(string groupId)
1. Obtenga productos del repositorio cuyo groupId esté configurado en groupId proporcionado, asegúrese de que el recuento sea 0 o cancele 2. Elimine el grupo del repositorio de grupos 3. Guarde los cambios
Mi pregunta es el siguiente escenario, ¿qué pasaría si:
En ProductService.ChangeProductGroup, verificamos que el grupo existe (sí existe), luego, justo después de esta verificación, un usuario separado elimina el productGroup (a través del otro GroupService.DeleteGroup). En este caso, establecemos una referencia a un producto que acaba de eliminarse.
¿Es esta una falla en mi diseño que debería usar un diseño de dominio diferente (agregando elementos adicionales si es necesario), o tendría que usar transacciones?