ドメインに複合構造があり、リーフ ノード (Allocation) に DurationChanged イベントがあり、これをプレゼンテーション レイヤー ビュー モデル構造 (TimeSheetViewModel 内) の上部で使用したいと考えています。それに到達する。
頭に浮かぶオプションは次のとおりです。
- TimeSheetComposite で購読します。各コンポジットは最終的に割り当てで構成され、TimeSheetComposite は TimeSheetViewModel のモデルです。子の DurationChanged イベントが発生したときに発生する TimeSheetComposite のイベントも必要になるようです。TimeSheetViewModel は後者のイベントをサブスクライブします。
- DurationChanged イベントを無視し、AllocationViewModel.Amount が変更されたときに TimeSheetViewModel に到達する INPC チェーンに従います。有用な情報、特に編集前の古い Amount はありませんが、必要に応じて必要な最終結果を十分に安価に計算できます。
- DurationChanged イベントをDomain Eventにします。私は現在ドメイン イベントを使用していませんが、コンセプトは確かに気に入っています。Udi の記事には、それを使い始めるのに十分なコードがあるようです。
- DurationChanged をパブリッシュおよびサブスクライブするために、ある種の Event Aggregator をセットアップします。Domain Events と Event Aggregators の違いは何なのか、同じことを解決するための補完的なアプローチなのか代替のアプローチなのか、まだよくわかりません。ここでのRx を使用した実装は有望に見えます。
この設計では、TimeSheetViewModel は Allocation.Duration がいつ変更されたかを知る必要があるため、日付ごとのすべての割り当て期間の新しい合計を取得できます。
DurationChanged 通知をどのように提供しますか?
乾杯、
ベリル