Как вызывать Действия из других Действий?(если это вообще разумно)

StackOverflow https://stackoverflow.com/questions/2205945

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top