イベントハンドラーとイベントアグリゲーターをいつ使用する必要がありますか?
私のコードには、親のViewModelによって制御される2つのViewModelがありますが、イベントハンドラーを使用してそれらの間で通信する必要があるかどうかを判断しようとしていますか?または、イベントアグリゲーターを使用しますか?単純なメソッド呼び出しになります。パラメーターをそれらの間で渡す必要はありません。
イベントハンドラーとイベントアグリゲーターをいつ使用する必要がありますか?
私のコードには、親のViewModelによって制御される2つのViewModelがありますが、イベントハンドラーを使用してそれらの間で通信する必要があるかどうかを判断しようとしていますか?または、イベントアグリゲーターを使用しますか?単純なメソッド呼び出しになります。パラメーターをそれらの間で渡す必要はありません。
私の見方では、EventAggregatorは通常、アプリケーション全体にイベントを公開する場合、より具体的には、誰が正確にリッスンしているのかわからない場合に 使用される重い銃です。
実際にはそうではないシナリオでは、通信したい2つのビューモデルがありますが、どちらもお互いを知っています。したがって、を使用できない本当の理由はありませんevents
。
少し緩く結合したままにしておきたい場合は、イベントを公開する各ビューモデルのインターフェイスを作成します。このようにして、各VMは、特定のインスタンスではなく、他のVMのインターフェイスを使用します。
ここにいくつかの良い情報へのリンクがあります(それは2019年5月の時点で生きています)... https://docs.microsoft.com/en-us/previous-versions/windows/apps/xx130639(v%3dwin.10 )(Microsoft、Prism)
「重要な決定を行う」セクションでは、それをいつ使用するかについて説明します。
.NETのイベントは、パブリッシュ/サブスクライブパターンを実装します。パブリッシャーとサブスクライバーの存続期間は、オブジェクト参照によって相互に結合され、サブスクライバータイプにはパブリッシャータイプへの参照が必要です。
イベント集約は、オブジェクトおよびタイプの参照によるリンクが不便なクラス間の通信を可能にするデザインパターンです。このメカニズムにより、パブリッシャーとサブスクライバーは相互に参照せずに通信できます。したがって、.NETイベントは、オブジェクト参照関係がすでにあるコンポーネント(コントロールとそれを含むページなど)間の通信に使用する必要があります。イベント集約は、緩く結合されたコンポーネント(2つの別個のページビューモデルなど)間の通信に使用されます。アプリ内)。詳細については、イベントの集計を参照してください。
これは、C#イベントがレイヤー(バスロジックをリッスンするUI)または親/子(含まれているデバイスをリッスンする機器)に適していること、およびイベント集約が兄弟(たとえば、兄弟UIパネルまたはデバイス間通信)に適していることを示唆していると大まかに見ています。 )。