Лучший способ для графического интерфейса Swing взаимодействовать с логикой домена?

У меня есть логика предметной области, реализованная в ряде POJO. Я хочу написать пользовательский интерфейс Swing, чтобы пользователь мог инициировать и видеть результаты различных действий в домене.

Какой лучший шаблон / фреймворк / библиотека для взаимодействия между пользовательским интерфейсом и доменом? Это сводится к следующему:

  • возможность пользовательского интерфейса преобразовывать жест пользователя в действие домена
  • домен может отправлять информацию о состоянии / результате обратно в пользовательский интерфейс для отображения

Я знаю MVC как широкую концепцию и возился с шаблоном Observer (чья реализация Java имеет некоторые недостатки, если я правильно понимаю), но мне интересно, есть ли общепринятые лучшие практики для этой проблемы?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
0
1 317
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я использовал шаблон Observer (используя магию AspectJ) в прошлом с успехом немного, но обнаружил, что если вы не будете осторожны, он быстро превратится в кластер ... эээ ... щелчок?

Быстро стало трудно управлять и, самое главное, чрезвычайно сложно отлаживать.

Редактировать:

Чтобы немного расширить мой ответ, мы использовали SWT, а не Swing, поэтому YMMV. Мы в основном использовали AspectJ для передачи данных от компонентов пользовательского интерфейса объектам модели. Эти модельные объекты были тупыми POJO.

Фактическая бизнес-логика была реализована путем «наблюдения» за объектами модели с помощью AspectJ и запуска требуемого события, если они изменились. Поэтому, если вы изменили значение в текстовом поле, AspectJ сработает и скопирует это значение в POJO. Если бы это поле в POJO имело событие для бизнес-логики, сработало бы тогда. Если эта логика изменит какие-либо POJO (а это возможно), AspectJ заметит и скопирует значение из POJO в компонент пользовательского интерфейса.

Я думаю, вы путаете POJO (en.wikipedia.org/wiki/POJO) с JavaBeans. Последние представляют собой немые хранилища данных, но первые действительно могут быть богатыми типами доменов с полным диапазоном поведения / логики. «Обычный» бит POJO просто указывает на отсутствие зависимости от какой-либо конкретной структуры или технологии.

Andrew Swan 16.09.2008 11:20

Ага, моя плохая. Обновлен пост, чтобы отразить :)

SCdF 16.09.2008 12:13

@Andrew Swan: Я полагаю, вы имеете в виду, что бывший - это тупые хранилища данных, но последний действительно может быть богатым типом домена с полным диапазоном поведения / логики.

Nate W. 12.08.2011 09:58
Ответ принят как подходящий

Определенно MVC - что-то вроде этого пример, который четко разделяет вещи. Проблема с примерами Swing заключается в том, что они, кажется, показывают, что MVC все работает в пределах Swing, что мне не кажется правильным.

Эта статья выглядит действительно хорошо написанной; Я проверю и посмотрю, как у меня дела.

Andrew Swan 16.09.2008 11:32

MVC отлично подходит для отдельного виджета, однако он становится немного неуправляемым, когда у вас есть pages и forms с большим количеством виджетов.

Одна вещь, на которую, возможно, стоит обратить внимание (и я не одобряю ее, я фактически не использовал ее, просто реализовал что-то очень похожее для себя), это Платформа привязки компонентов Beans (JSR295)

Другие вопросы по теме