JD *_*toy 25 domain-driven-design cqrs event-sourcing
在使用事件源聚合后端构建在DDD原则的环境中,如何将单独的聚合根(AR)相互通信?
例如,我有一个Facility聚合根(AR),它有一个负责创建BookingAR 的工厂方法.这Booking是PersonAR和FacilityAR 的时间敏感组合.A Person只能预订一个Facility.
在DDD中,我会保留对Bookingin Person和Personin的引用Facility.但是,当生成用于事件源的事件时,我认为尝试从后端处理事件反序列化将变得令人望而却步.因此,我只采用了对基于对象的值唯一id的引用.然而,这会带来一个新问题,当AR上的方法需要在另一个AR上调用另一个方法时 - 您如何处理这种情况?从域AR命中事件源存储库?
这种情况下的一般用例是什么?我接近这一切都错了吗?
thi*_*ing 42
聚合根边界定义一致性边界.在聚合内部,保证了一致性.外面......不是.因此,您不应该拥有跨越多个聚合的操作,并且必须保持一致.如果您需要跨越两个聚合的事务,则应检查聚合边界.
对于在聚合之外发生的事情,您应该有一个事件处理程序,它将命令发送到其他聚合.如果聚合之间的操作逻辑更复杂,您可以定义一个进程,一个将侦听事件并将命令发送到聚合的状态机.进程可用于定义长时间运行的事务(使用补偿而不是回滚),或者根据系统中大规模发生的事情(甚至在有界上下文之间)做出业务决策.