Pregunta

¿Cómo se debe separar agregada raíces (AR) se comunican entre sí en un entorno construido sobre principios DDD utilizando un back-end agregada por eventos de origen?

Por ejemplo, tengo una raíz agregada Facility (AR), que tiene un método de fábrica responsable de crear un AR Booking. El Booking es una combinación sensible al tiempo de un AR Person y un AR Facility. A Person sólo se puede reservar en un solo Facility.

En DDD, que habría mantenido referencias al Booking en Person y Person en Facility. Sin embargo, cuando se generan eventos para su uso en eventos de abastecimiento Creo que tratar de manejar la deserialización evento desde el back-end se haría prohibitivo. Por lo tanto, he tomado a que sólo cuenten con referencias a los del único de identificación basados ??en objetos de valor. Esto nos lleva a un nuevo problema, sin embargo, cuando un método en un AR tiene que llamar a otro método en otro AR - ¿cómo manejar esta situación? Golpear el repositorio de origen del evento desde el dominio AR?

¿Cuál es el caso de uso general, en este escenario? Am I acercarse todo mal?

¿Fue útil?

Solución

fronteras agregado de raíz definir un límite de consistencia. En el interior del agregado, se garantiza la coherencia. Fuera ... no lo es. Por lo que no debería tener las operaciones que se extiende por varios agregados y tiene que ser coherente. Si necesita una transacción que abarca dos agregados, debe revisar sus límites agregados.

Para las cosas que suceden fuera de los agregados que deben tener un controlador de eventos que va a enviar un comando a otros agregados. Si la lógica de las acciones entre los agregados es más complicado, se puede definir un proceso, una máquina de estado que va a escuchar a los eventos y enviar comandos a los agregados. Los procesos pueden ser utilizados para definir las transacciones de larga duración (con compensación en lugar de rollback), o tomar decisiones de negocio en base a lo que está sucediendo en el sistema a gran escala (incluso entre los contextos acotados).

Otros consejos

Cuando se utiliza abastecimiento de eventos y la CQRS (al menos en mi opinión) forma más elegante de la comunicación inter-AR es la mensajería. Usted puede mirar en Ncqrs proyecto (que será más fácil si usted es un tipo .NET), en particular ' mensajería' rama. La idea es, ARS implementa la interfaz IMessageHandler para cada tipo de mensaje que manejan y AR clase base método expone envío para enviar mensajes allí. Por medio de esta clientes API puede invocar el comportamiento del modelo y el modelo en sí mismo puede comunicarse (entre ARS).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top