Domain driven design 事件源或CQRS应用程序的读取端是否也应返回AggregateRoot?
在源于事件的环境中,例如Ruby toolkit,聚合根目录有一个明确的功能:设置、编译数据和发出事件。如中所述 由该聚合根(例如一个位置)发出的事件将发出一个PlaceAdded事件 然后,订阅的处理器确保将记录添加到查询数据库中的投影表中。例如,表中建议的位置 在应用的另一侧,即cqr的Q部分,存在可以执行的查询;e、 g.LatestProposedPlacesQuery将从Proposed_places表中返回一份建议地点列表 到目前为止的设置,我也不相信这是完全正确的 现在,我想知道上面提到的聚合,Place聚合,是否是查询时返回的合适对象。换句话说,对建议地点的查询是否应该返回地点聚合根对象的列表?或者聚合只与应用程序的命令/写入部分有关?还是我完全误解了这一切 换句话说,对建议地点的查询是否应该返回地点聚合根对象的列表?或者聚合只与应用程序的命令/写入部分有关?还是我完全误解了这一切 TL;DR-通常不使用聚合根处理查询消息 2003年,当聚合根模式被引入时,它就是这样做的;有一个数据结构,因此有一个对象知道该数据结构的详细信息,因此如果您想询问数据结构的问题,可以通过该对象转发它 因此,你仍然会找到大量支持这种方法的文献 但在很多情况下,它并不能真正为你带来很多好处。特别是,将数据复制到对象中除了再次将其复制出来之外别无其他原因,这是一种浪费。分散在内存中的对象集合的效率远不如经过仔细调整的数据结构,而且在许多情况下,模型的陈旧表示提供了完整的业务价值,同时更易于交付和维护 事件来源进一步夸大了这一点,因为事件日志往往是回答问题的糟糕表现 今天?聚合并没有为查询处理代码的可维护性增加太多内容,只需将数据转换为所需的形状并继续操作即可 作为一个额外的好处,您可以在聚合中获得更好的内聚性,因为该代码只需要为数据结构维护适当的域不变量,而不会因为一堆与更改无关的方法而变得混乱 换句话说,对建议地点的查询是否应该返回地点聚合根对象的列表?或者聚合只与应用程序的命令/写入部分有关?还是我完全误解了这一切 TL;DR-通常不使用聚合根处理查询消息 2003年,当聚合根模式被引入时,它就是这样做的;有一个数据结构,因此有一个对象知道该数据结构的详细信息,因此如果您想询问数据结构的问题,可以通过该对象转发它 因此,你仍然会找到大量支持这种方法的文献 但在很多情况下,它并不能真正为你带来很多好处。特别是,将数据复制到对象中除了再次将其复制出来之外别无其他原因,这是一种浪费。分散在内存中的对象集合的效率远不如经过仔细调整的数据结构,而且在许多情况下,模型的陈旧表示提供了完整的业务价值,同时更易于交付和维护 事件来源进一步夸大了这一点,因为事件日志往往是回答问题的糟糕表现 今天?聚合并没有为查询处理代码的可维护性增加太多内容,只需将数据转换为所需的形状并继续操作即可 作为一个额外的好处,您可以在聚合中获得更好的内聚性,因为该代码只需要为数据结构维护适当的域不变量,而不会因为一堆与更改无关的方法而变得混乱Domain driven design 事件源或CQRS应用程序的读取端是否也应返回AggregateRoot?,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,在源于事件的环境中,例如Ruby toolkit,聚合根目录有一个明确的功能:设置、编译数据和发出事件。如中所述 由该聚合根(例如一个位置)发出的事件将发出一个PlaceAdded事件 然后,订阅的处理器确保将记录添加到查询数据库中的投影表中。例如,表中建议的位置 在应用的另一侧,即cqr的Q部分,存在可以执行的查询;e、 g.LatestProposedPlacesQuery将从Proposed_places表中返回一份建议地点列表 到目前为止的设置,我也不相信这是完全正确的 现在,我想知道上