Domain driven design 我应该如何建模';知道';何时完成聚合更新以触发事件?
聚合Domain driven design 我应该如何建模';知道';何时完成聚合更新以触发事件?,domain-driven-design,consistency,Domain Driven Design,Consistency,聚合B的计算结果最终需要与聚合A一致。聚合A可以使用八种方法进行变异,每种方法都会导致B需要更新。这似乎是一个最终一致的任务,但实际的更新时间框架应该在几秒钟之内 我不想依赖应用层来“记住”触发更新。(还有)建立模型的最佳方法是什么 使用具有双重分派的域服务是一件痛苦的事情: 服务必须是a 通常会在一行中调用多个变异方法,我不希望每次调用方法时都触发B中的更新 构造函数注入也是一个难题: 在某些情况下,A不会发生变异,因此被迫实例化并注入域服务以监视肯定不会发生的变异是错误的 再说一次,通
B
的计算结果最终需要与聚合A
一致。聚合A
可以使用八种方法进行变异,每种方法都会导致B
需要更新。这似乎是一个最终一致的任务,但实际的更新时间框架应该在几秒钟之内
我不想依赖应用层来“记住”触发更新。(还有)建立模型的最佳方法是什么
- 服务必须是
a
- 通常会在一行中调用多个变异方法,我不希望每次调用方法时都触发
中的更新B
- 在某些情况下,
不会发生变异,因此被迫实例化并注入域服务以监视肯定不会发生的变异是错误的A
- 再说一次,通常会在一行中调用多个变异方法,我不想在每次调用方法时触发
中的更新B
- 再说一次,通常会在一行中调用多个变异方法,我不想在每次调用方法时触发
中的更新B
A
完成更新并知道它是否已更新时,我如何建模“知道”,这样我就可以触发B
的更新,而无需依赖应用层每次都以特定顺序调用方法
或者这真的是一个存储库级别或应用程序级别的问题,尽管这似乎是一个域需求?您的第三个问题。是一种常用且非常直接的技术:
AChangedType1
,…,AChangedTypeN
AChangedTypeX
,并发出相应的updateTypex
命令如果您不想在A上的每次更改时触发对B的更新,那么可以在发出
UpdateBTypeX
命令之前将更新延迟一段时间(正如在网络协议中通常所做的那样,请参见,例如,那么,如果对A
的更改将被丢弃而不是持久化,我如何防止B
更新?我不确定如何建模的部分是“知道A
已完成更改”部分。它必须包含来自存储库层的一些提示,对吗?是的,没错。当且仅当A
的事务成功提交时,存储库使用的基础结构才会发布域事件。酷,对该部分进行建模的好方法是什么?我一直在想基础结构如何知道这些事件必须等待(而其他人不知道),以及是什么给了基础架构丢弃或传递它们的信号。人们通常做什么?这高度依赖于您的域,没有通用的解决方案。但是,一般来说,如果B
只能在A
的X
、Y
和Z
事件发出时更新,那么你可以使用一个简单的状态机来跟踪所看到的事件。如果你只是想避免对B
进行多个链式更新,请等待给定的时间,比如1秒,然后发送命令更新B
,同时忽略在发出超时和发送命令之间收到的所有其他事件。“记住触发更新”这不是我会使用的短语。它似乎意味着某些东西被存储在某个地方,稍后由另一个进程或线程拾取,但事实并非如此。如果你在应用程序服务中按顺序执行两件事情,它们会立即在进程中执行。实际上,这远不是“记住事情”而不是在两个动作之间通过消息传递系统插入一次行程。“通常会连续调用多个变异方法,我不想触发…”-这里可能存在粒度问题。如果有一批操作导致B
中出现单一反响,那么该批操作可能会有一个通用语言的名称,并且您应该有一个适当粒度的应用程序服务来覆盖它(假设,由您的集合发布的相应事件)