CQRS + DDD +事件采购中的集合间通信

JD *_*toy 25 domain-driven-design cqrs event-sourcing

在使用事件源聚合后端构建在DDD原则的环境中,如何将单独的聚合根(AR)相互通信?

例如,我有一个Facility聚合根(AR),它有一个负责创建BookingAR 的工厂方法.这BookingPersonAR和FacilityAR 的时间敏感组合.A Person只能预订一个Facility.

在DDD中,我会保留对Bookingin PersonPersonin的引用Facility.但是,当生成用于事件源的事件时,我认为尝试从后端处理事件反序列化将变得令人望而却步.因此,我只采用了对基于对象的值唯一id的引用.然而,这会带来一个新问题,当AR上的方法需要在另一个AR上调用另一个方法时 - 您如何处理这种情况?从域AR命中事件源存储库?

这种情况下的一般用例是什么?我接近这一切都错了吗?

thi*_*ing 42

聚合根边界定义一致性边界.在聚合内部,保证了一致性.外面......不是.因此,您不应该拥有跨越多个聚合的操作,并且必须保持一致.如果您需要跨越两个聚合的事务,则应检查聚合边界.

对于在聚合之外发生的事情,您应该有一个事件处理程序,它将命令发送到其他聚合.如果聚合之间的操作逻辑更复杂,您可以定义一个进程,一个将侦听事件并将命令发送到聚合的状态机.进程可用于定义长时间运行的事务(使用补偿而不是回滚),或者根据系统中大规模发生的事情(甚至在有界上下文之间)做出业务决策.

  • 很好的答案 - 如果您正在寻找关于此主题的进一步深度,您可能会发现这篇文章有用:[事件源系统中的集合间通信](http://danielwhittaker.me/2014/11/22/4-secrets -inter聚集型通信事件来源的系统/) (2认同)