Препятствует ли использование средств просмотра JFace хорошему разделению MVC?
-
22-09-2019 - |
Вопрос
Я пишу приложение с графическим интерфейсом, в котором хочу использовать Swing и SWT.Конечный пользователь каким-то образом укажет, что следует использовать (он не будет использовать оба одновременно!).В целом я предпочитаю SWT, и я смотрел на JFace, но кажется, что если я буду использовать его самые мощные функции, я увеличу связь между графическим интерфейсом пользователя и моделью и значительно усложню абстрагирование графического интерфейса, чтобы Swing можно было использовать. также используется.
Так ли это?Можно ли использовать JFace без привязки деталей графического интерфейса к модели или наоборот?
Решение
Насколько я знаю, использование средств просмотра JFace обеспечивает довольно хорошее разделение представления и модели.
Единственной жесткой связью здесь является выбор фактической реализации средства просмотра (например,использование TableViewer вместо TreeViewer для привязки вашей модели к виджету «Таблица» или «Дерево» соответственно).
Что касается вашей первой части вопроса, которая указывает на то, что вы по какой-то причине хотите отделить свое приложение от выбора инфраструктуры графического интерфейса, я бы посоветовал вам взглянуть на проект UFace
проект UFace стремится предоставить именно то, к чему вы, по-видимому, стремитесь - единую реализацию пользовательского интерфейса, которая может работать со многими серверными модулями графического интерфейса (он вызывает Провайдеры):
На странице проекта UFace на момент написания этой статьи указана поддержка следующих провайдеров:
- JFace/SWT
- Качать
- ГВТ
(Я также слышал слухи о некоторой работе по поддержке провайдера Qt Jambi)
Другие советы
Вы не можете переключаться динамически.JFace вызывает SWT.Вместо этого нельзя попросить вызвать AWT.
Что касается того, связывает ли JFace модель с графическим интерфейсом, то нет.Имеет набор модельных интерфейсов, но к ним можно приклеить любую понравившуюся модель.Вы должны сделать это аккуратно, если ваш клиент когда-нибудь захочет иметь возможность удалить JFace.