![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Вопрос по архитектуре. У меня есть меню - класс унаследованный от JMenuBar и соотвественно класс окна, унаследованный от JFrame.
План был таков: 1) Для меню только класс MenuController (меню статично поэтому модель не нужна) 2) Для JFrame и соответственно всех входящех в него элементов GUI один FrameController и одна модель FrameModel. Подумав немного, я столкнулся с проблемой, вот, допустим, пользователь из меню открыл файл. То есть отработал код в MenuController, далее ... тут у меня начинаются вопросы. По идее я должен сообщить FrameController, что был открыт файл и он должен уже его обработать и направить данные в MenuController, так? Тогда я должен подписать FrameController на какое-то событие которым MenuController будет сигналищировать об открытии файла, так? Основной вопрос - Не очень ли это сложно? Быть может правильнее вообще создать один глобальный Controller, который будет обрабатывать события от всех элементов? Поделитесь пожалуйста опытом как правильно проектировать MVC. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
teg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 12.3.2008 Репутация: нет Всего: нет |
Правильней? Это неверный вопрос.
Всё определяется Вашими задачами. Если приложение небольшое, а функционал невелик, то вполне хватит одного контроллера. Но если заранее известно, что простое на старте приложение будет обрастать фичами, то надо сразу планировать по-серьёзному. |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
teg, Мои задачи описаны в самом вопросе
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
А вы попробуйте какую-нибудь заготовку. Например, в Nетбинc 6 есть тип проекта - DesktopApplication. Нажали на кнопку - и готова болванка с меню и кнопкой About. Там сплошной маппинг action-ов ( модно! ), у каждого класса есть файл ресурсов. Пустое приложение уже имеет 200К библиотеку, где инфраструктура забита. Но есть опасность: пока это осваивать, они новое придумают.
|
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
COVD, Я этого не могу себе позволить.
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
![]() |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
Royan, шаблон Command, реализованный в Swing (javax.swing.Action), вас не устраивает? И вообще, при чём здесь MVC? Зачем пихать MVC туда, где он вообще неприменим?
Если уж так хотите всю логику размазать тонким слоем, сделайте себе глобальный диспетчер событий. Ткнули в меню - событие, кому надо - подпишутся. Это сообщение отредактировал(а) w1nd - 24.3.2008, 00:11 -------------------- ![]() ![]() |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Ну если коротко, то я ограничен только использованием классов, входящих в core java API 1.6 соответственно данный подход для меня невозможен, да и потом как вы сами сказали на изучение этого framework'а уйдет столько времени что кто то успеет написать новый. w1nd, Насчет шаблона, можно пример, я не совсем понимаю как он относится к моей задаче. Глобальный диспетчер событий он же и есть глобальный Controller о котором я говорю в конце своего оригинального поста. Если вы имели ввиду что-то другое, пожалуйста, поясните. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
Вы спрашиваете: "То есть отработал код в MenuController, далее ... тут у меня начинаются вопросы. По идее я должен сообщить FrameController, что был открыт файл и он должен уже его обработать и направить данные в MenuController, так?" 1. Зачем сообщать кому-либо о необходимости открывать файл, если в соответствующем пункте меню должен быть Action, который и файл откроет и вполнит все сопутствующие процедуры? 2. Зачем данные в MenuController? Зачем вообще MenuController? Что-то вроде глобального контекста, хранящего состояния всех и вся? Это сообщение отредактировал(а) w1nd - 25.3.2008, 00:35 -------------------- ![]() ![]() |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Окей я не спорю, но можно пример кода с использованием Action'а? Я никогда с ними не имел дела. Добавлено через 4 минуты и 9 секунд Или речь идет об обработке в методе actionPerformed ActionEvent'ов? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 15 Всего: 104 |
-------------------- Lost.... |
|||
|
||||
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Kangaroo, Спасибо за ссылку. В общем, из прочтенного я так понял что Action'ы это то что было до того как придумали вышеозвученный паттерн. Я также не нашел преимуществ Action'ов перед Controller'ом. И там и там надо писать класс (наследник AbstractAction в первом случае и собственно Controller во втором) разница лишь в том, что наследник AbstractAction выходит более специфицированным, потому что используется только с конкретным набором GUI элементов (Кнопки, пункты меню, текстовые поля и все). Controller же обычно пишется таким образом, что в нем имплементируются все интерфейсы (например, PropertyChangeListener для той же модели) В общем я пока склоняюсь написать один внутренний класс контроллер в корневом классе окна своего приложения. Так мне кажется будет задан простор для дальнейшей разработки, то есть когда мне вдруг понадобятся custom свойства я легко смогу создать класс модели и подключить обработку событий к Controller'у. А все меню и кнопки запросто смогут уже сейчас взять себе actionHandler'ами экземпляр класса Controller.
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 23 Всего: 54 |
![]() -------------------- ![]() ![]() |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Ну, это я роптал. DesktopApplication можно рассматривать, как пример реализации идеи акшинов и некоторых других прогрессивных приемов, которые можно копировать не приходя в сознание ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |