Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design 事件源或CQRS应用程序的读取端是否也应返回AggregateRoot?_Domain Driven Design_Aggregateroot - Fatal编程技术网

Domain driven design 事件源或CQRS应用程序的读取端是否也应返回AggregateRoot?

Domain driven design 事件源或CQRS应用程序的读取端是否也应返回AggregateRoot?,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,在源于事件的环境中,例如Ruby toolkit,聚合根目录有一个明确的功能:设置、编译数据和发出事件。如中所述 由该聚合根(例如一个位置)发出的事件将发出一个PlaceAdded事件 然后,订阅的处理器确保将记录添加到查询数据库中的投影表中。例如,表中建议的位置 在应用的另一侧,即cqr的Q部分,存在可以执行的查询;e、 g.LatestProposedPlacesQuery将从Proposed_places表中返回一份建议地点列表 到目前为止的设置,我也不相信这是完全正确的 现在,我想知道上

在源于事件的环境中,例如Ruby toolkit,聚合根目录有一个明确的功能:设置、编译数据和发出事件。如中所述

由该聚合根(例如一个位置)发出的事件将发出一个PlaceAdded事件

然后,订阅的处理器确保将记录添加到查询数据库中的投影表中。例如,表中建议的位置

在应用的另一侧,即cqr的Q部分,存在可以执行的查询;e、 g.LatestProposedPlacesQuery将从Proposed_places表中返回一份建议地点列表

到目前为止的设置,我也不相信这是完全正确的

现在,我想知道上面提到的聚合,Place聚合,是否是查询时返回的合适对象。换句话说,对建议地点的查询是否应该返回地点聚合根对象的列表?或者聚合只与应用程序的命令/写入部分有关?还是我完全误解了这一切

换句话说,对建议地点的查询是否应该返回地点聚合根对象的列表?或者聚合只与应用程序的命令/写入部分有关?还是我完全误解了这一切

TL;DR-通常不使用聚合根处理查询消息

2003年,当聚合根模式被引入时,它就是这样做的;有一个数据结构,因此有一个对象知道该数据结构的详细信息,因此如果您想询问数据结构的问题,可以通过该对象转发它

因此,你仍然会找到大量支持这种方法的文献

但在很多情况下,它并不能真正为你带来很多好处。特别是,将数据复制到对象中除了再次将其复制出来之外别无其他原因,这是一种浪费。分散在内存中的对象集合的效率远不如经过仔细调整的数据结构,而且在许多情况下,模型的陈旧表示提供了完整的业务价值,同时更易于交付和维护

事件来源进一步夸大了这一点,因为事件日志往往是回答问题的糟糕表现

今天?聚合并没有为查询处理代码的可维护性增加太多内容,只需将数据转换为所需的形状并继续操作即可

作为一个额外的好处,您可以在聚合中获得更好的内聚性,因为该代码只需要为数据结构维护适当的域不变量,而不会因为一堆与更改无关的方法而变得混乱

换句话说,对建议地点的查询是否应该返回地点聚合根对象的列表?或者聚合只与应用程序的命令/写入部分有关?还是我完全误解了这一切

TL;DR-通常不使用聚合根处理查询消息

2003年,当聚合根模式被引入时,它就是这样做的;有一个数据结构,因此有一个对象知道该数据结构的详细信息,因此如果您想询问数据结构的问题,可以通过该对象转发它

因此,你仍然会找到大量支持这种方法的文献

但在很多情况下,它并不能真正为你带来很多好处。特别是,将数据复制到对象中除了再次将其复制出来之外别无其他原因,这是一种浪费。分散在内存中的对象集合的效率远不如经过仔细调整的数据结构,而且在许多情况下,模型的陈旧表示提供了完整的业务价值,同时更易于交付和维护

事件来源进一步夸大了这一点,因为事件日志往往是回答问题的糟糕表现

今天?聚合并没有为查询处理代码的可维护性增加太多内容,只需将数据转换为所需的形状并继续操作即可

作为一个额外的好处,您可以在聚合中获得更好的内聚性,因为该代码只需要为数据结构维护适当的域不变量,而不会因为一堆与更改无关的方法而变得混乱