3

これは、GWTアクティビティを返すファクトリを実行するSpring Roo 1.1の方法です(はい、Spring Framework)

 public Activity getActivity(ProxyPlace place) {
    switch (place.getOperation()) {
      case DETAILS:
        return new EmployeeDetailsActivity((EntityProxyId<EmployeeProxy>)place.getProxyId(), requests, 
          placeController, ScaffoldApp.isMobile() ? EmployeeMobileDetailsView.instance() : EmployeeDetailsView.instance());

      case EDIT:
        return makeEditActivity(place);

      case CREATE:
        return makeCreateActivity();
    }

    throw new IllegalArgumentException("Unknown operation "
        + place.getOperation());
  }

定数付きのスイッチケースを使って工場を作ると、100年前に戻ったように思えます。これは、GWT/GAE統合を備えた公式の自動生成されたSpringroo1.1ですが、私はあなたを子供にしません

これは間違いなく春ではないので、これは一部の幹部の空の発表であると私は推測することができます

VMWareとGoogleは速すぎて何かを出すことができず、完全に完成していなかったようですよね。

私は何かが足りないのですか、それともこれは半分焼かれていて、Spring + GWT MVPが機能する方法ではありませんか?

Spring、GWT(2.1 MVPアプローチ)およびGAEがどのように接続する必要があるかについてのより良い例がありますか?私はこのような歴史と活動を管理するためのすべての配管を行うのは嫌です。(注釈なし?IOC?)

また、他の誰かが同じことをしたことを見つけるためだけに、車輪の再発明をして自分のSpring拡張機能を作成するのは嫌です。さらに悪いことに、SpringSourceとGoogleがroo1.2をまもなくリリースして正しくすることを知りたいと思います。

4

1 に答える 1

2

Rooはあまり使わないので、推測しかできません。引用したコードは、基本的に「アクティビティと場所を使用したGWT MVP開発」ドキュメントページのサンプルアプリの対応する部分のように見えます(注:コメントは挿入していません。サンプルコードからのものです)

public class AppActivityMapper implements ActivityMapper {
...

 /**
  * Map each Place to its corresponding Activity. This would be a great use
  * for GIN.
  */
 @Override
 public Activity getActivity(Place place) {
    // This is begging for GIN
    if (place instanceof HelloPlace)
        return new HelloActivity((HelloPlace) place, clientFactory);
    else if (place instanceof GoodbyePlace)
        return new GoodbyeActivity((GoodbyePlace) place, clientFactory);

    return null;
 }
}

「switch+getOperation()」を使用するか、「if + instanceof」を使用するかは、それほど重要ではありません。問題は、アクティビティがnew演算子で構築されていることです。これは、依存性注入の基本と矛盾します。

したがって、DIで行う基本的なことは、Placeのタイプごとに1つずつ、ActivityMapperにファクトリを挿入することです。

 public Activity getActivity(Place place) {
    if (place instanceof HelloPlace)
        return helloActivityFactory.build((HelloPlace) place);
    else if (place instanceof GoodbyePlace)
        return goodbyeActivityFactory.build((GoodbyePlace) place);

    return null;
 }

これにはまだスイッチング特性があります。これは、場所とアクティビティの間に何かをマッピングする必要があるためです(唯一の代替手段は、各場所にアクティビティファクトリを注入することです)。次のようにマッピングを構成可能にすることができます。

 Map<String, ActivityFactory> activityMap; /* injected */

 public Activity getActivity(Place place) {
    ActivityFactory factory = activityMap.get(place.getOperation());
    if (factory != null)
        return factory.build(place);

    return null;
 }

...共通のパラメーターで機能する汎用のActivityFactoryインターフェースを定義できる場合(たとえば、私のドラフトでbuild()は、引数としてのみを使用しplaceます)。

これが私の推測です(単なる推測です!)、なぜこのようなものがRooで生成されたコードに含まれていないのですか:「アクティビティと場所を使用したGWT MVP開発」の記事は、 「大規模なアプリケーション開発とMVP」のフォローアップです。これは、DIなしでMVPを提示し、将来の「Ginを使用してコードを削減し、テストを容易にする」記事を提供することを約束しました。それはまだそこになく、サンプルコードは依存性注入を統合するように更新されていません。Rooで生成されたコードは、このトピックのリファレンスであるため、ある程度その記事に基づいていると思います。

于 2011-02-17T12:02:20.557 に答える