3

これは、GWTのアクティビティ(はい、春のフレームワークを)返すファクトリを行う Rooの1.1方法ですGWTでMVPを処理するためのIoC /「Springy」の方法は何ですか? (ヒント、おそらく春Rooの1.1方法)

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()); 
    } 

それは、我々私には思えます私たちが定数を持つスイッチケースを使って工場を作るのであれば、何百年も前に戻ってきました。これは間違いなく

春されていないため、今、これは公式の自動私はこの空の一部の幹部でアナウンスを想定することができ、私の子供、あなたではない

、春のカンガルー1.1 GWT/GAEの統合とを生成VMwareとGoogleがあまりにもなかったようです何かを得るために速く、それはかなりそれを仕上げていない、それはありませんか?

私は何かが不足していますか、これは半分焼いていますが、Spring + GWT MVPは動作するはずです。

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

また、私は、SpringSourceとGoogleがすぐにroo 1.2をリリースして、他の誰かが同じことをしているか、悪化していることを知るために、それはちょうど

答えて

2

私はまったくRooを使用しないので、私は推測することができます。それはdoesnの

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; 
} 
} 

::あなたは基本的に"GWT MVP Development with Activities and Places"ドキュメントページ(私はコメントを挿入していない、彼らはコード例からしている注意してください)からサンプルアプリで対応する部分のようなルックスを引用したコード"switch + getOperation()"が使われているか、 "if + instanceof"が使われているかどうかは関係ありません。問題は、アクティビティがnewオペレータで構築されていることです。それはDependency Injectionの基本と矛盾します。

だから、DIで行うための基本的な事は、場所の種類ごとに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; 
} 

...それは(build()が唯一の引数としてplaceを使用することになり、私のドラフトで、例えば)共通パラメータで動作する汎用的なActivityFactoryインタフェースを定義することができます場合。 の記事は"Large scale application development and MVP"へのフォローアップであり、DIなしのMVPを提示しています。これは、次のような理由で発生する可能性があります。将来、「Ginを使用してコードを削減し、テストを容易にする」記事。まだそこには存在せず、サンプルコードはDependency Injectionを統合するように更新されていません。私はRooが生成したコードは、このトピックのリファレンスであるため、その記事にある程度基づいていると思います。

+0

GWTとGAE + Springはあまりにも多くのボランプレートを引き起こし、Rooが私に快適感を与えることはありません。後ほど簡単に変更することができます –

+0

途中で素晴らしい回答をいただきありがとうございます。 ! –