首页 > 解决方案 > 具有 2 个资源的 CQRS 读取模型

问题描述

我有两个总根:员工和公司。使用 CQRS 我有 2 个操作来创建每个模型:通过 POST 创建公司 (/company) 和 NewEmploy (/employe)。同样,通过 GET 检索 GetCompany (/company/{id}) 和 GetEmploy (/employe/{1}) 的 2 个操作。我想获取属于公司的员工,所以我创建了下一个端点 /company/1?include=employees,但我不知道是否必须加入我的模型才能让员工与公司或者每次我添加一个新的employee修改读取模型直接获取而不加入。现在我正在为写入模型和读取模型使用相同的表。

标签: cqrsjsonapi-resources

解决方案


我不知道我是否必须在我的模型中加入才能让员工与公司相关,或者每次添加新员工时修改读取模型以直接获取而不加入。

实际上有三个选择。

1)当你添加新员工时,也运行join查询并使用结果更新读取模型;当您查询读取模型时,只需返回最新的副本。

2)当您添加新员工时,停止。当您查询读取模型时,运行连接以更新您的数据,然后返回此副本

3)当您添加新员工时,停止。当您查询读取模型时,只需返回最新的副本。 在后台,运行一个监视任务以查看是否添加了新员工 - 如果是,则运行联接并更新读取模型。

在后台运行可能意味着很多不同的事情 - 您可以在每次添加员工时安排工作,可以使用调度程序运行工作,可以让管理员控制按需运行工作。

您最终可能会根据您需要满足的 SLA 类型(在人们开始抱怨之前允许读取模型中的数据有多“旧”)做出选择,处理您将如何允许用户阅读他们自己的写入,系统中使用了哪些其他类型的缓存。

要理解的重要一点是,“将写入模型转换为读取模型”是您可以在写入和读取之外运行的操作。


推荐阅读