あなたがここで直面している問題は、私の意見ではRCP関連ではありません。そのより多くの建築上の問題。あなたの意見はビジネスロジックと結びついています! の解決策は、2つの(共通)デザインパターンによって行うことができます。
- モデル - ビュー - のcontroler(MVC)
- モデル - ビュー - プレゼンター(MVP)
あなたはたくさん見つけることができますこれについての情報はウェブ上にある。私はMVPを使用して、あなたの特定の問題に対して可能な解決策を指摘するつもりです。
複数のプロジェクトを作成する必要があります。 1つはもちろんRCPプラグインで、rcp.viewと呼ぶことができます。今度は別のUIを作成します。これはUIの貢献を行いません(org.eclipse.core.runtimeのみで始まります)。rcp.presenterとなります。簡単にするために、このプラグインも今のモデルになります。
次のステップ:
- 依存関係rcp.viewのにrcp.presenterを追加します(その 重要なプレゼンターがビューへの の参照を持っていないこと)
- 輸出すべてあなたは のパッケージを作成してrcp.presenter に表示されるようにします。
- rcp.presenterで作成するいくつかの方法を有するNインターフェース IPerspective(showLogiDialog()、showAdministratorViews(ユーザユーザ)、showStandardViews(ユーザユーザ))
- は、コンストラクタにIPerspectiveを受け取り、保存し、クラスPerspectivePresenter作成等 それは属性内にあります。
- In rcp。ビューあなたの視点に移動、あなたインタフェースIPerspectiveを実装し、コンストラクタで新しい参照プレゼンター=新しいPerspectivePresenter(この)
- コール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をご覧ください。
類似している:http://stackoverflow.com/q/2457117/565879 – Buttons840