Как вызвать действия из других действий? (если это вообще разумно) - PullRequest
1 голос
/ 05 февраля 2010

Я собираюсь изменить приложение Swing для использования ActionListeners с классами Action, потому что я понял, что многие из моих пунктов меню будут также использоваться на панели инструментов.

Сейчас у меня есть класс с именем ImportExport, который обрабатывает состояние базовой модели и затем отображает соответствующие пользовательские диалоги. ImportExport имеет функции save(), saveAs() и open(). Когда пользователь нажимает на элемент меню «Открыть», прослушиватель действий вызывает open(), open(), сначала проверяет, есть ли изменения в модели, и в этом случае отображается диалоговое окно, спрашивающее пользователя, хочет ли он сначала сохранить. Теперь, если пользователь нажимает «Да», open() вызывает save(), который снова выполняет некоторые проверки и отображает диалоги пользователя. save() довольно настойчив: единственный способ выйти из этого действия - либо успешно сохранить, либо пользователь решает, что он хочет отменить. Я настоятельно полагаюсь на обратную связь, которую обеспечивает save(), и если пользователь хочет отменить, я также отменяю вызывающую функцию open().

Я хотел разделить класс ImportExport на три класса (OpenAction, SaveAction & SaveAsAction), каждый из которых подклассов AbstractAction и в конечном итоге избавиться от класса ImportExport. И вот тут возникает моя проблема: как я могу сказать SaveAction выполнить, если пользователь хочет сохранить модель перед открытием другой? И как мне получить отзыв, если пользователь решит отменить?

Это даже правильный подход? Мне не нравится дублировать код в действии сохранения и открытия, и я уже добавил как можно больше функциональных возможностей в основную модель, но диалоговые окна пользователей там явно неуместны, так что это не вариант. Был ли Action предназначен для поддержки такого рода функций, или я просто оставил свой класс ImportExport и просто делегировал все вызовы действий соответствующим функциям в ImportExport. Как вы используете Actions?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2010

Я иногда добавляю действие «контроллер», когда задействовано дерево решений. OpenAction, SaveAction и SaveAsAction будут создавать подкласс этого действия контроллера. Действие контроллера будет определять состояние модели и запрашивать дополнительную информацию у пользователя, если это необходимо, а затем вызывать правильный подкласс.

1 голос
/ 05 февраля 2010

Я бы создал ImportExportController класс, имеющий следующие методы: open, save, saveAs. Этот контроллер будет знать бизнес-логику.

Мои Action классы не содержат много бизнес-логики. Они будут вызывать только контроллер.

Но эти Действия будут содержать все метки, значки, ускоритель ... которые должны отображаться в JButton, JMenuItem и т. Д.

Для меня Actions - это ориентированные на GUI классы, используемые для удобства (и они очень удобны!), Но нет классов, предназначенных для обработки бизнес-логики.

...