2009-08-07 15 views
3

私はEclipse RCPの初心者です。私は自分自身のためにアプリケーションを構築しようとしています。実際にモデルオブジェクトを処理する方法について、私は混乱しています。私が抱える問題に対処できる例はありませんので、間違った方向に向かっていると思います。Eclipse RCPアプリケーションに「グローバル」データを保存する場所

私は認証されたユーザー情報を保持するクラスでアプリケーションを初期化する必要があります。 WorkbenchWindowAdvisor(場所が間違っていますか?)を使用して、表示するビューを決定するための初期化(認証など)を行いました。これが完了すると、ビューが表示されます。今、そのビューでもは、私が以前に検索/作成したユーザー情報にアクセスする必要があります。

質問は、そのデータをどのように取得するのですか?ビューはplugin.xmlに配線されています。私はデータをビューに与えることはできません。だから私はビューが何とかそれを取得しなければならないと仮定します。しかし、それを取得するための適切な場所は何ですか?私はIApplicationの実装に静的変数を入れることを考えましたが、それは間違っていました。任意のアドバイスやポインタが大変感謝しています。ありがとう。

+0

類似している:http://stackoverflow.com/q/2457117/565879 – Buttons840

答えて

5

あなたがここで直面している問題は、私の意見ではRCP関連ではありません。そのより多くの建築上の問題。あなたの意見はビジネスロジックと結びついています! の解決策は、2つの(共通)デザインパターンによって行うことができます。

  1. モデル - ビュー - のcontroler(MVC)
  2. モデル - ビュー - プレゼンター(MVP)

あなたはたくさん見つけることができますこれについての情報はウェブ上にある。私はMVPを使用して、あなたの特定の問題に対して可能な解決策を指摘するつもりです。

複数のプロジェクトを作成する必要があります。 1つはもちろんRCPプラグインで、rcp.viewと呼ぶことができます。今度は別のUIを作成します。これはUIの貢献を行いません(org.eclipse.core.runtimeのみで始まります)。rcp.presenterとなります。簡単にするために、このプラグインも今のモデルになります。

次のステップ:

  1. 依存関係rcp.viewのにrcp.presenterを追加します(その 重要なプレゼンターがビューへの の参照を持っていないこと)
  2. 輸出すべてあなたは のパッケージを作成してrcp.presenter に表示されるようにします。
  3. rcp.presenterで作成するいくつかの方法を有するNインターフェース IPerspectiveshowLogiDialog()、showAdministratorViews(ユーザユーザ)、showStandardViews(ユーザユーザ)
  4. は、コンストラクタにIPerspectiveを受け取り、保存し、クラスPerspectivePresenter作成等 それは属性内にあります。
  5. In rcp。ビューあなたの視点に移動、あなたインタフェースIPerspectiveを実装し、コンストラクタで新しい参照プレゼンター=新しいPerspectivePresenter(この)
  6. コールpresenter.load()プレゼンターでとimplenent この多分などを作成しますこの

コード:

public void load() 
{ 
    User user = view.showLoginDialog(); // returns a user with the provided name/pw 
    user.login(); // login to system/database 
    if(user.isAdministrator()) 
    view.showAdministratorViews(user); 
    else 
    view.showStandardViews(user); 
} 

あなたが見ることができるように、ビューは単にrとプレゼンターへの参照を作成しますすべてのビジネスロジックに対応し、発表者は何を表示するかを指示します。したがって、あなたのパースペクティブでは、これらのインターフェイス関数を実装し、それぞれに異なる方法でパースペクティブを設定することができます。

同じように表示される各ビューについて、操作を実行するビューのプレゼンターが必要であり、ビューに(インターフェイスを使用して)表示するものと最終データの受け渡しを指示します。ビューは論理については気にしません。これは、JFace-Databindingを使用する場合にも非常に便利です(バインドされたデータのみがビューに渡されます)。 たとえば、WorkbenchWindowAdisorは、アプリケーションに必要なものすべてを作成します。その他のビューやパースペクティブは、取得したデータに応じてメニューを有効/無効にすることができます(isAdministratorのように、特別なadminMenuを有効にしたい場合があります)。

私はこれがかなり重いアプローチであることは知っていますが、Eclipse RCPはビッグ(名前が豊富だと言います)アプリケーション用に設計されています。したがって、適切なアーキテクチャで時間を費やす必要があります。私の最初のRCPアプリは、あなたが説明したようなものでした...私は物事を保存する場所とすべての参照を処理する方法を知らなかった。私の仕事でMVPについて学びました(そして私はまだ学んでいます)。コンセプトを理解するのに時間がかかりますが、その価値はあります。

プラグインをどのように構築できるかについては、my second post at this questionをご覧ください。

+1

ありがとう、答えを入力する時間を取ってくれてありがとう!私はそれに行くと私はちょうどそれを "得る"ことができるかどうかを確認します。ポインタをありがとう。 – aberrant80

+2

もう1つ。ビューはモデルについて知っているので、上記のパターンは実際はMVCです。プレーンなMVPを得るためには、ビューはモデルについて何も知ってはならず、JFace-Databindingを使ってこれを実現することができます...私はそれを実現しました。しかし、あなたは説明されているように始め、後でBindingsを導入することができます。私は素晴らしい例を見つけました:http://rcpquickstart.com/2007/11/08/mvp-example-code/ – lostiniceland

関連する問題