Eclipse RCP: где я должен хранить объекты модели и как они общаются с видами? - PullRequest
9 голосов
/ 10 ноября 2008

В способе ведения дел в Eclipse RCP, где мне хранить объекты модели? И когда они загружаются или меняются, как они должны общаться с представлениями?

Я пытаюсь перенести существующее приложение на Eclipse RCP. Его можно рассматривать как приложение, похожее на IDE: я открываю файл, который содержит ссылки на исходные файлы. Исходные файлы отображаются в виде дерева. Я могу отредактировать источник и встроить источники в какой-нибудь вывод ...

Например, когда я обрабатываю команду Open, где я могу создать объект модели, чтобы мои виды могли их видеть? Я бы предпочел избегать использования класса singleton manager, но это может быть самый простой способ.

Интересный код, который я нашел при просмотре исходного кода 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);
}

Связанный:

Ответы [ 2 ]

5 голосов
/ 10 ноября 2008

Я считаю, что это лучше всего достигается через слушателей.

Ваши данные (модель) находятся в закрытом пакете, и только интерфейсы этих данных представлены в общедоступном пакете.

alt text

В этом вики-разделе вы найдете принцип, а также конкретные примеры здесь .


Относительно модели, osgi-подобным подходом было бы использовать хост-плагин в качестве доступного объекта. то есть:

MyPlugin.getDefault().getModel()

Это позволит вам настроить / утилизировать модель вместе с жизненным циклом плагина.

Если модель находится в одном плагине, она может определять точки расширения для слушателей. Представление может расширять эти точки расширения, которые затем автоматически регистрируются при загрузке плагина Model. Представления могут запрашивать модель для получения необходимой информации, как только они получают первое сообщение от модели.

Хороший пример привязки данных можно найти в этой статье .

2 голосов
/ 10 ноября 2008

Мы склонны использовать IEditorPart s для хранения сохраняемой копии модели (полученной из IEditorInput).

Если представление должно знать о модели, используйте каркас ISelection и сфокусируйтесь, чтобы переместить модель из редактора в представление.

...