4

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

想到的选项包括:

  1. 在 TimeSheetComposite 中订阅它。每个组合最终都由 Allocations 组成,TimeSheetComposite 是 TimeSheetViewModel 的 Model。似乎我还需要 TimeSheetComposite 中的一个事件,该事件在子 DurationChanged 事件被触发时被触发;TimeSheetViewModel 将订阅后一个事件。
  2. 忽略 DurationChanged 事件,并在 AllocationViewModel.Amount 更改时跟随冒泡到 TimeSheetViewModel 的 INPC 链。我不会有有用的信息,特别是编辑前的旧 Amount,但如果有必要,我可以足够便宜地计算所需的最终结果。
  3. 使 DurationChanged 事件成为领域事件;我目前不使用域事件,但我确实喜欢这个概念,而且看起来 Udi 的文章中有足够的代码可以开始使用它。
  4. 设置某种事件聚合器来发布和订阅 DurationChanged。我还不太确定领域事件和事件聚合器之间的区别是什么,以及它们是解决同一问题的补充方法还是替代方法。这里使用 Rx的实现看起来很有希望。

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

您将如何提供 DurationChanged 通知?

干杯,
贝里尔

领域复合结构和事件

在此处输入图像描述

表示层结构

在此处输入图像描述

4

1 回答 1

0

我最终在 (TimeSheet)Composite 中监听了叶子事件,然后基本上在那里重新抛出了一个类似的事件,以使 (TimeSheet)ViewModel 更容易监听它。

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

干杯,
贝里尔

于 2011-04-01T17:29:53.090 回答