Проблема, с которой вы здесь сталкиваетесь, на мой взгляд, не связана с RCP. Это больше архитектурная проблема. Ваше мнение связано с бизнес-логикой и!
Решение может быть сделано двумя (общими) шаблонами проектирования:
- Модель-Вид-Контроллер (MVC)
- Model-View-Presenter (MVP)
Вы можете найти много информации об этом в Интернете. Я собираюсь указать возможное решение для вашей конкретной проблемы с использованием MVP.
Вам нужно будет создать несколько проектов. Один из них, конечно, плагин RCP, давайте назовем его rcp.view . Теперь вы создаете еще один, который не вносит вклад пользовательского интерфейса (только для начала org.eclipse.core.runtime) и называете его rcp.presenter . Для упрощения этот плагин также будет моделью на данный момент.
Следующие шаги:
- Добавьте rcp.presenter к
зависимости от rcp.view (его
важно, что у докладчика нет
ссылка на вид)
- Экспорт всех ваших пакетов
собираюсь создать в rcp.presenter
так они видны
- В rcp.presenter создайте интерфейс
IPerspective , который имеет несколько методов
например ( showLogiDialog (), showAdministratorViews (пользователь-пользователь), showStandardViews (пользователь-пользователь) )
- Создать класс PerspectivePresenter , который принимает IPerspective в конструкторе и сохраняет его в атрибуте
- В rcp.view перейдите к своей Перспективе, реализуйте свой интерфейс IPerspective , и в конструкторе создайте новую ссылку Presenter = new PerspectivePresenter (this)
- вызов Presenter.load () и неумолимым
это в презентере может быть вот так
код:
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);
}
Как вы можете видеть, представление просто создает ссылку на докладчика, который отвечает за всю бизнес-логику, и докладчик сообщает представлению, что отображать. Таким образом, в вашей Перспективе вы реализуете эти функции интерфейса, и в каждой вы можете настроить свою Перспективу по-своему.
Для каждого просмотра это происходит одинаково, вам нужен докладчик для представления, который выполняет операции и сообщает представлению (используя интерфейс), что отображать и передавать окончательные данные. Представление не заботится о логике. Это также очень полезно при использовании JFace-Databindings (тогда только связанные данные передаются в представление).
Например, WorkbenchWindowAdisor просто создаст все, что нужно в приложении. Другие представления, перспективы, затем могут включать / отключать меню и так далее, в зависимости от полученных данных (например, когда isAdministrator, вы можете включить специальное adminMenu).
Я знаю, что это довольно сложный подход, но Eclipse RCP предназначен для больших (как следует из названия, насыщенных) приложений. Таким образом, вы должны провести некоторое время в правильной архитектуре. Мое первое приложение RCP было таким, как вы описали ... Я никогда не знал, где хранить вещи и как обращаться со всеми ссылками. На своей работе я узнал о MVP (и я все еще учусь). Понять концепцию нужно время, но оно того стоит.
Возможно, вы захотите посмотреть мой второй пост на этот вопрос , чтобы получить другую идею о том, как вы можете структурировать свои плагины.