我应该如何建模和了解'当聚合完成更新以触发事件?

时间:2016-01-19 16:51:39

标签: domain-driven-design consistency

汇总B的计算需要最终与汇总A一致。聚合A可以使用八种方法进行变异,每种方法都需要更新B。这似乎是最终一致的任务,但实际的更新时间框架应该在几秒钟内。

我不想依赖应用层来记住'触发更新。 (Jimmy Bogard says this也是如此。)建模的最佳方法是什么?

  1. 使用具有双重调度的域服务很痛苦:

    • 该服务必须是A
    • 上每个方法的参数
    • 通常会连续调用多种变异方法,并且每次调用方法时我都不想在B中触发更新。
  2. 构造函数注入也很痛苦:

    • 在某些情况下A没有发生变异,因此被迫实例化并注入域名服务以观察当然不会发生的突变感觉不对。
    • 同样,通常会连续调用多种变异方法,而且每次调用方法时我都不想在B中触发更新。
  3. 域名活动听起来不错,但我不确定那是什么样的。每种变异方法都会引发一个域事件?

    • 同样,通常会连续调用多种变异方法,而且每次调用方法时我都不想在B中触发更新。
  4. 我如何建模'了解'当A完成更新并知道它是否已更新以便我可以触发B更新而不依赖于应用层每次按特定顺序调用方法?

    或者这确实是存储库级别或应用程序级别的问题,即使它似乎是域要求吗?

1 个答案:

答案 0 :(得分:1)

您的号码3是常用的,也是一种非常直接的技巧:

  1. 在模型A更新
  2. 上提升域事件AChangedType1,...,AChangedTypeN
  3. 让一个传奇/流程管理员监听AChangedTypeX并发出相应的UpdateBTypeX命令。
  4. 松散耦合(A和B现在彼此无关)并且很好地扩展(易于并行化),并且它们之间的关系在长时间运行的过程中被明确建模。

    如果您不想在A上的每次更改时触发对B的更新,那么您可以在发出UpdateBTypeX命令之前将更新延迟一段时间(因为它通常在网络协议中完成) ,参见,例如,TCP's delayed acks