Лучший способ для Swing GUI общаться с доменной логикой? - PullRequest
7 голосов
/ 16 сентября 2008

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 16 сентября 2008

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

1 голос
/ 16 сентября 2008

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

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

0 голосов
/ 16 сентября 2008

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

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

Edit:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...