調停者のパターンまたは責任が多すぎる
-
22-08-2019 - |
質問
私のアプリケーションには、メニュー バーやツール バーなど、相互に認識する必要があるコンポーネントがいくつかあります。これらのコンポーネントはどちらも、ジョブを追加または削除したり、どのジョブが選択されているかを確認したりするためにテーブルについて知る必要があります。
そこで、というオブジェクトを作成しました。 guiMediator
これをすべてのオブジェクトに渡すと、オブジェクトはそのオブジェクトに自分自身を登録して、そのオブジェクトを使用して相互に通信できるようになります。また、新しいジョブが追加されたとき、またはバックグラウンド ワーカーがジョブを終了したときにイベントを起動する役割もあります。
システムについて多くのことを知っているので、この種の使用法は 1 か所に責任がありすぎますか、それともこれがパターンの正しい使用法ですか?
解決
通常、次のようなコマンド パターンを使用します。
- ユーザーがメニュー バーの「Foo」ボタンをクリックすると、FooButtonClickedCommand が実行されます。
- FooButtonClickedCommand は、やるべきことをすべて実行し、ビュー (メニュー バー、テーブルなど) を適切に変更します。
したがって、コマンドはすべてのビュー コンポーネントについて認識しますが、ビュー コンポーネントが認識する必要があるのは、ユーザーが特定のアクションを実行したときにどのコマンドを実行するかだけです。
他のヒント
パッシブビューを使用します。これについてはこちらをお読みください ここ.
- 各フォームをインターフェースの背後に配置します
- 各フォームはそれ自体を 1 つ以上の UI オブジェクトに登録します。
- UI オブジェクトは、セットアップ、エントリ、表示などのように自然に整理されている必要があります。ワード プロセッサは、ドキュメントごとに UI オブジェクトを 1 つだけ持つことができます。一方、マシン コントローラーには各画面に複数のオブジェクトがある場合があります。
- インターフェイスは、イベントを UI オブジェクトに渡し、プレゼンテーション コントロールを公開し、UI オブジェクトにサーフェスを描画する薄いシェルとして実装されます。
- 次に、UIObject は入力を受け取り、どのコマンド オブジェクトを実行するかを判断します。
- コマンド オブジェクトはモデルを更新し、1 つ以上の UI オブジェクトにビューを更新するように指示します。
- UIObject はビューを更新します。
ボタンやチェック ボックスなどについては、UI インターフェイス以外では何も行われないことに注意してください。インターフェイスを使用して、実際の実装を抽象化します。
これにより、いくつかの利点が得られます。まず、コードが UI とどのように対話するかを文書化し、自動テストに使用するモック オブジェクトを実装する場所を提供し、最後に UI の変更の自由度をさらに高めます。
たとえば、コマンド ボタンの代わりにクリック可能なパネルを置き換えます。その後、フォームはボタンの代わりにパネルからのクリック イベントの受け渡しを開始します。フォームは、各ウィジェットが実行する実際のコマンドを認識しないままになる可能性があります。UI オブジェクトがそれを処理します。
は、代替よりも良いですね...でもねえ、私が最も醜い姉妹と結婚し; - )