我刚开始学习CQRS模型。因此,当在域上执行操作时,我将该操作作为事件存储在DB中,而不更新实际域。因此,我理解在阅读方面,我必须通过应用给定域的所有事件并返回到客户端来准备读取模型。只要我使用它的ID访问单个实体,这就很好。但是在分页数据的情况下我怎么能处理相同的事情。
例如:假设我有一个名为“内容”的域名,并且会在该域名上执行操作
活动1:状态更改
活动2:网站访问用户将内容标记为有用
活动3:将内容分配给用户进行审核。
现在我的查询页面大小为20
查询1:获取状态为“已批准”的“内容”
查询2:为用户提供“内容”(将其分配给审核人员)
查询3:按实用计数
获取“内容”在用户界面上,列出的内容应该包含所有信息,例如 - 分配给谁以及无论上述查询是否有用,
如果它像是逐个阅读所有内容并且丢弃不符合标准的内容实体,最终会读取太多数据,对吗?
在查询3的情况下:通过有用的计数获取“内容” - 我应该阅读DB中存在的所有内容实体,以确定哪个具有最有用的评级。
请指导我学习CQRS的阅读方。
答案 0 :(得分:1)
听起来像你在读取端选择了与读取端相同的域对象。您不必在这些模型之间进行一对一映射。您可以根据要使用它们的方式从同一域对象创建不同的读取模型。
据我了解,您创建了一个读取模型,您可以使用ID获取每个内容。当你想要显示一个单独的内容时,这很好。
要解决搜索问题,您可以创建一个针对搜索进行了优化的新读取模型。例如,您可以在SQL表中存储要筛选的值。这两个读取模型可以完全相互分离。由于第一个模型是通过密钥访问的,因此可以使用键值存储。
所以,据我所知,在阅读方面,我必须准备阅读模型 应用给定域的所有事件并返回给客户。
您不必申请所有活动。您可以只应用您感兴趣的事件。您也可以应用来自其他域对象的事件。