域事件v事件聚合器v ...其他

时间:2011-03-30 19:12:54

标签: event-handling domain-driven-design eventaggregator domain-events

我的域中有一个复合结构,其中叶节点(Allocation)有一个DurationChanged事件,我想在我的表示层视图模型结构的顶部使用(在TimeSheetViewModel中),我想知道是什么最好的办法就是去。

想到的选项包括:

  1. 在TimeSheetComposite中订阅它。每个复合最终由Allocations组成,TimeSheetComposite是TimeSheetViewModel的Model。看来我还需要TimeSheetComposite中的一个事件,当一个子DurationChanged事件被触发时会被触发; TimeSheetViewModel将订阅后一个事件。
  2. 忽略DurationChanged事件,只需按照更改AllocationViewModel.Amount时冒充到TimeSheetViewModel的INPC链即可。我没有一个有用的信息,特别是编辑前的旧金额,但如果有必要,我可以便宜地计算所需的最终结果。
  3. 将DurationChanged事件设为Domain Event;我目前不使用域事件,但我确定喜欢这个概念,看起来Udi的文章中有足够的代码可以开始使用它。
  4. 设置某种Event Aggregator以发布&订阅DurationChanged。我不太确定域事件和事件聚合器之间的区别是什么,以及它们是否是解决相同问题的补充或替代方法。 implementation here using Rx looks promising
  5. 。{{3}}。

    在此设计中,TimeSheetViewModel需要知道Allocation.Duration何时更改,以便按日期获得所有分配持续时间的新总数。

    您如何提供DurationChanged通知?

    干杯,
    Berryl

    域复合结构&事件

    enter image description here

    表示层结构

    enter image description here

1 个答案:

答案 0 :(得分:0)

我收听了(TimeSheet)Composite中的叶子事件,然后在那里重新抛出一个类似的事件,使(TimeSheet)ViewModel能够轻松地收听它。

当我更好地理解DomainEvents / EventAggregators时,我将重新审视这个。

干杯,
Berryl