Domain driven design 为什么允许在以后的某个时间强制执行跨聚合的一致性规则?

Domain driven design 为什么允许在以后的某个时间强制执行跨聚合的一致性规则?,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,发件人: 不变量,是必须维护的一致性规则 当数据更改时,将涉及 总量。任何跨越聚合的规则都不应 始终保持最新。通过事件处理、批处理 处理或其他更新机制时,可以使用其他依赖项 在指定的时间内解决。但不变量应用于 每次交易完成后将强制执行聚合 a) 我将其解释为,设计用于维护多个聚合之间一致性的规则不必在其中一个聚合将其更改保存到某个持久性存储时强制执行,而是可以在该聚合已完成其持久性存储事务的某个稍后时间强制执行 b) 但是,既然这样会导致数据不一致/损坏,为什么还要容忍这种行为呢 谢谢你。对的聚

发件人:

不变量,是必须维护的一致性规则 当数据更改时,将涉及 总量。任何跨越聚合的规则都不应 始终保持最新。通过事件处理、批处理 处理或其他更新机制时,可以使用其他依赖项 在指定的时间内解决。但不变量应用于 每次交易完成后将强制执行聚合

a) 我将其解释为,设计用于维护多个聚合之间一致性的规则不必在其中一个聚合将其更改保存到某个持久性存储时强制执行,而是可以在该聚合已完成其持久性存储事务的某个稍后时间强制执行

b) 但是,既然这样会导致数据不一致/损坏,为什么还要容忍这种行为呢

谢谢你。对的聚合可以定义为一致性边界。边界之外的事物,如其他集合,是那些可以作为后续交易的一部分进行可接受更新的实体。这是

b) 。通常,从业务角度来看,暂时过时的数据是可以接受的,应该明确讨论。此外,不一致实际上表现在通常被视为一致的地方。例如,一旦您从某个服务请求数据并接收到它,数据就有可能不一致,除非存在环境事务。如果请求的资源是远程的,那么事务将必须被分发,因此会受到所有的陷阱的影响

看看Udi Dahan从商业角度讨论最终一致性的文章