Лучший способ для графического интерфейса Swing взаимодействовать с логикой домена?
-
09-06-2019 - |
Вопрос
У меня есть некоторая логика домена, реализованная в нескольких POJO.Я хочу написать пользовательский интерфейс Swing, позволяющий пользователю инициировать и видеть результаты различных действий домена.
Какой лучший шаблон / фреймворк / библиотека для взаимодействия между пользовательским интерфейсом и доменом?Это сводится к следующему:
- пользовательский интерфейс, способный преобразовать жест пользователя в действие домена
- домен, способный отправлять информацию о состоянии / результате обратно в пользовательский интерфейс для целей отображения
Я знаю о MVC как о широкой концепции и поработал с шаблоном Observer (чья реализация Java имеет некоторые недостатки, если я правильно понимаю), но мне интересно, существует ли принятая наилучшая практика для решения этой проблемы?
Решение
Определенно MVC - что-то вроде этого пример что явно разделяет ситуацию.Проблема с примерами Swing заключается в том, что они, кажется, показывают, что весь MVC работает в рамках swing, что мне не кажется правильным
Другие советы
MVC является фантастическим для отдельного виджета, однако он становится немного неуправляемым, когда у вас есть pages
и forms
с большим количеством виджетов.
Одна вещь, на которую, возможно, стоит обратить внимание (и я не одобряю это, я на самом деле не использовал это, просто реализовал что-то очень похожее для себя), это Структура привязки Beans (JSR295)
В прошлом я использовал шаблон Observer (используя AspectJ magic) с некоторые успех, но обнаружил, что, если вы не будете осторожны, он быстро превратится в скопление..эээ..флик?
Им быстро стало трудно управлять и, самое главное, чрезвычайно трудно отлаживать.
Редактировать:
Чтобы немного расширить мой ответ, мы использовали СВТ, не Качается, так YMMV.В основном мы использовали AspectJ для подключения передачи данных из компонентов пользовательского интерфейса в объекты модели.Эти модельные объекты были глупыми POJO.
Фактическая бизнес-логика была выполнена путем "просмотра" объектов модели с помощью AspectJ и запуска требуемого события, если они изменились.Таким образом, если вы изменили значение в текстовом поле, AspectJ сработает и скопирует это значение в POJO.Если бы в этом поле в POJO было событие для бизнес-логики, это было бы тогда огонь.Если бы эта логика изменила какой-либо POJO (а это могло бы быть) AspectJ заметил бы и скопировал значение из POJO в компонент пользовательского интерфейса.