我的域中有一个复合结构,其中叶节点(分配)有一个 DurationChanged 事件,我想在表示层视图模型结构的顶部(在 TimeSheetViewModel 中)使用该事件,我想知道最好的方法是什么去实现它。
想到的选项包括:
- 在 TimeSheetComposite 中订阅它。每个组合最终都由 Allocations 组成,TimeSheetComposite 是 TimeSheetViewModel 的 Model。似乎我还需要 TimeSheetComposite 中的一个事件,该事件在子 DurationChanged 事件被触发时被触发;TimeSheetViewModel 将订阅后一个事件。
- 忽略 DurationChanged 事件,并在 AllocationViewModel.Amount 更改时跟随冒泡到 TimeSheetViewModel 的 INPC 链。我不会有有用的信息,特别是编辑前的旧 Amount,但如果有必要,我可以足够便宜地计算所需的最终结果。
- 使 DurationChanged 事件成为领域事件;我目前不使用域事件,但我确实喜欢这个概念,而且看起来 Udi 的文章中有足够的代码可以开始使用它。
- 设置某种事件聚合器来发布和订阅 DurationChanged。我还不太确定领域事件和事件聚合器之间的区别是什么,以及它们是解决同一问题的补充方法还是替代方法。这里使用 Rx的实现看起来很有希望。
在此设计中,TimeSheetViewModel 需要知道 Allocation.Duration 何时发生更改,以便它可以按日期获得所有分配持续时间的新总数。
您将如何提供 DurationChanged 通知?
干杯,
贝里尔