3

私のアプリケーションには、メニューバーやツールバーなど、お互いを知る必要のあるいくつかのコンポーネントがあります。これらは両方とも、ジョブを追加または削除したり、選択されたジョブを見つけたりするためにテーブルについて知る必要があります。

そこで、guiMediatorすべてのオブジェクトに渡すというオブジェクトを作成し、そのオブジェクトを使用して相互に到達できるように、オブジェクトに登録しました。また、新しいジョブが追加されたとき、またはバックグラウンドワーカーがジョブを終了したときに、イベントを発生させる責任があります。

システムについてよく知っているので、このタイプの使用法は1つの場所で責任が大きすぎるのでしょうか、それともパターンの正しい使用法でしょうか。

4

3 に答える 3

3

通常、私は次のようなコマンドパターンを使用します。

  1. ユーザーがメニューバーの[Foo]ボタンをクリックすると、FooButtonClickedCommandが実行されます。
  2. FooButtonClickedCommandは、想定されていることをすべて実行してから、ビュー(メニューバー、テーブルなど)を適切に変更します。

したがって、コマンドはすべてのビューコンポーネントを認識しますが、ビューコンポーネントが知る必要があるのは、特定のアクションがユーザーによって実行されたときに実行するコマンドだけです。

于 2009-05-19T12:40:46.343 に答える
1

ここで読むことができるパッシブビューを使用します。

  • 各フォームをインターフェースの背後に配置します
  • 各フォームは、1つ以上のUIオブジェクトに登録されます
  • UIオブジェクトは、セットアップ、入力、表示などのように自然に編成する必要があります。ワードプロセッサは、ドキュメントごとに1つのUIオブジェクトしか持つことができません。マシンコントローラは、画面ごとに複数のオブジェクトを持っている場合があります。
  • インターフェイスは、UIオブジェクトにイベントを渡し、プレゼンテーションコントロールを公開し、UIオブジェクトにサーフェスを描画するシンシェルとして実装されます。
  • 次に、UIObjectは入力を受け取り、実行するコマンドオブジェクトを特定します
  • コマンドオブジェクトはモデルを更新し、1つ以上のUIオブジェクトにビューを更新するように指示します。
  • UIObjectsはビューを更新します。

ボタンやチェックボックスなどについては、UIインターフェイス以外には何も知らないことに注意してください。インターフェイスを使用して、実際の実装を抽象化します。

これにより、いくつかの利点が得られます。最初に、コードがUIとどのように相互作用するかを文書化し、自動テストに使用するモックオブジェクトを実装する場所を提供し、最後にUIを変更する際の自由度を大幅に高めます。

たとえば、コマンドボタンの代わりにクリック可能なパネルを使用します。フォームは、ボタンではなくパネルからクリックイベントの受け渡しを開始します。フォームは、各ウィジェットが実行することになっている実際のコマンドを認識しないままになる可能性があります。UIオブジェクトがそれを処理します。

于 2009-05-19T12:49:59.397 に答える
-3

代替案よりもいいですね...でもねえ、私は最も醜い妹と結婚しました;-)

于 2009-05-19T12:33:54.873 に答える