12

私はちょうど GWT を学んでいるので、その癖と機能をすべて整理しようとしています。私は彼らが MVP パターンを示す例を読んでいます。

彼らが使用する AppController は ValueChangeHandler インターフェイスを実装し、履歴が変更されると onValueChange メソッドがトリガーされます。

私の問題は、この AppController の onValueChange にあります (サンプル プロジェクトを見ていない人のために、以下に含めておきます)。送信された履歴トークンの文字列比較を行い、適切なプレゼンターをインスタンス化してアクションを処理します。これは、3 つのアクションを含むサンプル アプリには問題ありませんが、これをさらに多くのアクションを含む実際のアプリにスケールするにはどうすればよいでしょうか?

このパターンに固執すると、かなり大きな/醜いelse if.

どんな助けでも大歓迎です!

public class AppController implements Presenter, ValueChangeHandler<String> {

  ...

  public void onValueChange(ValueChangeEvent<String> event) {
    String token = event.getValue();

    if (token != null) {
      Presenter presenter = null;

      if (token.equals("list")) {
        presenter = new ContactsPresenter(rpcService, eventBus, new ContactsView());
      }
      else if (token.equals("add")) {
        presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
      }
      else if (token.equals("edit")) {
        presenter = new EditContactPresenter(rpcService, eventBus, new EditContactView());
      }

      if (presenter != null) {
        presenter.go(container);
      }
    }
  } 
}
4

2 に答える 2

6

大規模な GWT アプリケーションで有効なポイントを上げます。私は最近、50.000 行以上の GWT ポータル アプリに取り組みましたが、イベントや複雑なスイッチ/ハンドラー パターンに埋もれてしまいました。これがどれほどひどいものになるかを説明し、解決策を示唆する良いブログ投稿がここにあります (ひどい脚注を参照)。

ただし、新しい GWT2 UIBinder および MVP 機能により、物事が単純化されます。実際、上記のブログ投稿の著者は、Places フレームワーク (GWT 2.1 の一部) についてここに書いています

于 2010-04-02T11:52:26.540 に答える
0

onValueChange メソッドが受け取る必要がある唯一のイベントは、「ビューの変更」イベントです。各条件が 1 行であることを考えると、それほど大きくなることはありません。最終的には、そのパターンを使用しても問題ありません。

Lars が言ったように、UiBinder を MVP パターンと組み合わせるのは簡単で、コード行の数が大幅に減り、コードの変更が容易になります。

于 2010-05-20T13:31:31.957 に答える