Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: GUI и Java FX приложения > Вопрос, связанный с тем как лучше реализоавть MVC |
Автор: Royan 23.3.2008, 19:12 |
Вопрос по архитектуре. У меня есть меню - класс унаследованный от JMenuBar и соотвественно класс окна, унаследованный от JFrame. План был таков: 1) Для меню только класс MenuController (меню статично поэтому модель не нужна) 2) Для JFrame и соответственно всех входящех в него элементов GUI один FrameController и одна модель FrameModel. Подумав немного, я столкнулся с проблемой, вот, допустим, пользователь из меню открыл файл. То есть отработал код в MenuController, далее ... тут у меня начинаются вопросы. По идее я должен сообщить FrameController, что был открыт файл и он должен уже его обработать и направить данные в MenuController, так? Тогда я должен подписать FrameController на какое-то событие которым MenuController будет сигналищировать об открытии файла, так? Основной вопрос - Не очень ли это сложно? Быть может правильнее вообще создать один глобальный Controller, который будет обрабатывать события от всех элементов? Поделитесь пожалуйста опытом как правильно проектировать MVC. |
Автор: teg 23.3.2008, 19:41 |
Правильней? Это неверный вопрос. Всё определяется Вашими задачами. Если приложение небольшое, а функционал невелик, то вполне хватит одного контроллера. Но если заранее известно, что простое на старте приложение будет обрастать фичами, то надо сразу планировать по-серьёзному. |
Автор: Royan 23.3.2008, 20:40 |
teg, Мои задачи описаны в самом вопросе |
Автор: COVD 23.3.2008, 21:37 |
А вы попробуйте какую-нибудь заготовку. Например, в Nетбинc 6 есть тип проекта - DesktopApplication. Нажали на кнопку - и готова болванка с меню и кнопкой About. Там сплошной маппинг action-ов ( модно! ), у каждого класса есть файл ресурсов. Пустое приложение уже имеет 200К библиотеку, где инфраструктура забита. Но есть опасность: пока это осваивать, они новое придумают. |
Автор: Royan 23.3.2008, 22:28 |
COVD, Я этого не могу себе позволить. |
Автор: COVD 23.3.2008, 22:59 |
![]() |
Автор: w1nd 24.3.2008, 00:11 |
Royan, шаблон Command, реализованный в Swing (javax.swing.Action), вас не устраивает? И вообще, при чём здесь MVC? Зачем пихать MVC туда, где он вообще неприменим? Если уж так хотите всю логику размазать тонким слоем, сделайте себе глобальный диспетчер событий. Ткнули в меню - событие, кому надо - подпишутся. |
Автор: Royan 25.3.2008, 00:22 |
Ну если коротко, то я ограничен только использованием классов, входящих в core java API 1.6 соответственно данный подход для меня невозможен, да и потом как вы сами сказали на изучение этого framework'а уйдет столько времени что кто то успеет написать новый. w1nd, Насчет шаблона, можно пример, я не совсем понимаю как он относится к моей задаче. Глобальный диспетчер событий он же и есть глобальный Controller о котором я говорю в конце своего оригинального поста. Если вы имели ввиду что-то другое, пожалуйста, поясните. |
Автор: Royan 25.3.2008, 01:19 |
Окей я не спорю, но можно пример кода с использованием Action'а? Я никогда с ними не имел дела. Добавлено через 4 минуты и 9 секунд Или речь идет об обработке в методе actionPerformed ActionEvent'ов? |
Автор: Kangaroo 25.3.2008, 01:42 |
http://java.sun.com/docs/books/tutorial/uiswing/misc/action.html |
Автор: Royan 25.3.2008, 17:20 |
Kangaroo, Спасибо за ссылку. В общем, из прочтенного я так понял что Action'ы это то что было до того как придумали вышеозвученный паттерн. Я также не нашел преимуществ Action'ов перед Controller'ом. И там и там надо писать класс (наследник AbstractAction в первом случае и собственно Controller во втором) разница лишь в том, что наследник AbstractAction выходит более специфицированным, потому что используется только с конкретным набором GUI элементов (Кнопки, пункты меню, текстовые поля и все). Controller же обычно пишется таким образом, что в нем имплементируются все интерфейсы (например, PropertyChangeListener для той же модели) В общем я пока склоняюсь написать один внутренний класс контроллер в корневом классе окна своего приложения. Так мне кажется будет задан простор для дальнейшей разработки, то есть когда мне вдруг понадобятся custom свойства я легко смогу создать класс модели и подключить обработку событий к Controller'у. А все меню и кнопки запросто смогут уже сейчас взять себе actionHandler'ами экземпляр класса Controller. |
Автор: w1nd 25.3.2008, 22:38 | ||
![]() |
Автор: COVD 27.3.2008, 03:05 | ||
Ну, это я роптал. DesktopApplication можно рассматривать, как пример реализации идеи акшинов и некоторых других прогрессивных приемов, которые можно копировать не приходя в сознание ![]() |