我有两个根源:员工和公司。使用CQRS我有2个动作来创建每个模型: 通过POST创建公司(/ company)和NewEmploy(/ employe)。同样,通过GET检索GetCompany(/ company / {id})和GetEmploy(/ employe / {1})的2个操作。我想得到属于公司的员工,所以我创建了下一个端点/ company / 1?include = employees,但我不知道是否必须加入我的模型才能让员工与公司或每次我添加新员工修改读取模型直接获得而不加入。现在我正在使用相同的表来编写模型和读取模型。
答案 0 :(得分:0)
我不知道我是否必须加入我的模型才能让员工与公司有关,或者每次添加新员工时都会修改读取模型以直接获取而不加入。
实际上有三种选择。
1)添加新员工时,还要运行联接查询并使用结果更新读取模型;当您查询读取模型时,只需返回最新的副本。
2)添加新员工时,请停止。查询读取模型时,运行联接以更新数据,然后返回此副本
3)添加新员工时,请停止。查询读取模型时,只需返回最新的副本。 在后台中,运行一项任务,监视是否添加了新员工 - 如果是,请运行联接并更新读取模型。
在后台运行可能意味着很多不同的事情 - 您可以在每次添加员工时安排工作,您可以使用调度程序运行作业,您可以让管理员控件按需运行作业。 / p>
您可能最终会根据您需要满足哪种SLA(如何"旧"读取模型中的数据允许在人们开始抱怨之前)进行选择,处理以及如何允许用户阅读自己的写入,系统中正在使用其他类型的缓存。
要理解的重要一点是"将写模型转换为读模型"是一种可以在写入和读取之外运行的操作。