2012-01-24 10 views
7

MVPスタイル(GWTP)でGWTアプリケーションを開発し始め、サーバー側で認証と承認にSpringセキュリティを使用しています。GWTにグローバルに必要なオブジェクトを格納するためのベストプラクティス

アプリケーションの多くのビューでは、現在のユーザーの許可された権限に関してコントロールを有効または無効にする必要があります。私はすでに、必要なすべての情報を含むuserDetailsDtoへのアクセスを提供するRPCサービスを持っています。

今私の質問:クライアント側にユーザ​​ーのDTOを格納するのに最適な場所は何ですか?

多くのプレゼンターではユーザー権利が関連しているため、どこにでも渡す必要があります。別の方法として、すべてのプレゼンタでRPCサービスインスタンスを設定し、毎回ユーザーの詳細を要求することもできます(おそらくクライアント側にキャッシュされます)。しかし、私はこの目的のためだけに各プレゼンターにユーザーRPCサービスを持たせるという考えが嫌いです。

正直言って、私はむしろ、UserDetailsオブジェクトを配置する場所と、アプリ内のどこからでもアクセスできる中央レジストリを好むでしょう。 GWTに既にそのようなレジストリがありますか?

私の例のように、水平に使用されるオブジェクトによく直面することがあります。 GWTでそれらを扱うには?

答えて

5

現在のユーザーをpublic static変数に保存するだけです。 どこからでもアクセスできます。

+0

これは私の現在の解決策です。しかし、1)静的変数は単体テストには問題があり、2)決定するのは難しいです。どの部分(クラス)がその静的インスタンスを保持するかは責任があります。プレゼンター、RPCサービス(そこからユーザーオブジェクトにアクセスしたい場合は、ビューオブジェクト内のRPCサービスに依存していることを意味します) – rainer198

+0

私は現在のユーザーをClientFactory実装に格納しています。これは単純であり、KISS原則(http://en.wikipedia.org/wiki/KISS_principle) – koma

+0

私はクライアントファクトリの代わりにGINを使用していますが、私はこの解決策が好きです。この質問は単一の真の答えを持つことはできません(stackoverflowは私に警告しましたそれは拒否される可能性があるので)、そう、Riley Lark、両方の答えを「正しい」とマークできれば、私はそうするだろう;-) – rainer198

4

私はログインしたユーザーの権利や好みなどを知る必要があるすべてのプレゼンターに「AppState」オブジェクトを挿入します。私は、より静的な変数に注入することを好みます。テストでのモックアップが容易になり、余分なタイピングによって、各オブジェクトが実際にグローバルデータにアクセスする必要があるかどうかを検討する必要があります。

+0

GINの@Injectアノテーションを使ってそれをプレゼンターのコンストラクターに渡すことを意味しますか? – rainer198

+0

私は実際にコンストラクタの定義に単純な引数をつけてコンストラクタに渡します。余分なタイピングではなく、私が何かを変更したときの動作が気に入っています。変更が必要なすべての点でエラーをコンパイルします。 IMHOのすべての点を考慮に入れます。 –

関連する問題