Eclipse RCP:モデルオブジェクトはどこに保存する必要があり、ビューとどのように対話するのですか?
-
07-07-2019 - |
質問
Eclipse RCPの方法では、モデルオブジェクトをどこに保存すればよいですか?そして、それらがロードまたは変更されたとき、どのようにビューと対話する必要がありますか?
既存のアプリケーションをEclipse RCPに移植しようとしています。 IDEのようなアプリケーションと見なすことができます。ソースファイルへのリンクを含むファイルを開きます。ソースファイルがツリービューに表示されます。ソースを編集し、ソースを出力に組み込むことができます...
たとえば、Openコマンドを処理するとき、ビューで表示できるようにモデルオブジェクトをどこで作成しますか?シングルトンマネージャークラスの使用は避けたいのですが、それが最も簡単な方法かもしれません。
JDTのソースコードを参照していることがわかった興味深いコードは、JavaCore、JavaModel、JavaModelManagerです。およびJavaProject。
IProject[] projects= ResourcesPlugin.getWorkspace().getRoot().getProjects();
public static IJavaProject create(IProject project) {
if (project == null) {
return null;
}
JavaModel javaModel = JavaModelManager.getJavaModelManager().getJavaModel();
return javaModel.getJavaProject(project);
}
関連:
解決
これはリスナーを介して達成するのが最適だと思います。
データ(モデル)はプライベートパッケージにあり、それらのデータのインターフェイスのみがパブリックパッケージに公開されています。
この wikiセクションには原則がありますが、具体的な例はこちら。
モデルに関して、osgiのようなアプローチは、アクセス可能なオブジェクトとしてホストプラグインを使用することです。すなわち:
MyPlugin.getDefault().getModel()
これにより、プラグインのライフサイクルとともにモデルをセットアップ/破棄できます。
モデルが1つのプラグインにある場合、リスナーの拡張ポイントを定義できます。ビューはこれらの拡張ポイントを拡張し、モデルプラグインのロード時に自動的に登録されます。ビューは、モデルから最初のメッセージを取得するとすぐに、必要な情報をモデルに照会できます。
データバインディングの良い例は、この記事にあります。
他のヒント
モデルのコピーを保持するために IEditorPart
を使用する傾向があります( IEditorInput
から派生)。
ビューがモデルについて知る必要がある場合は、ISelectionフレームワークを使用して、エディターからビューにモデルを移動します。