Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос, связанный с тем как лучше реализоавть MVC 
:(
    Опции темы
Royan
Дата 23.3.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
teg
Дата 23.3.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Правильней? Это неверный вопрос. 

Всё определяется Вашими задачами. Если приложение небольшое, а функционал невелик, то вполне хватит одного контроллера. Но если заранее известно, что простое на старте приложение будет обрастать фичами, то надо сразу планировать по-серьёзному.
PM MAIL ICQ   Вверх
Royan
Дата 23.3.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



teg, Мои задачи описаны в самом вопросе


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
COVD
Дата 23.3.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



А вы попробуйте какую-нибудь заготовку. Например, в Nетбинc 6 есть тип проекта - DesktopApplication. Нажали на кнопку - и готова болванка с меню и кнопкой About. Там сплошной маппинг action-ов ( модно! ), у каждого класса есть файл ресурсов. Пустое приложение уже имеет 200К библиотеку, где инфраструктура забита. Но есть опасность: пока это осваивать, они новое придумают.
PM MAIL   Вверх
Royan
Дата 23.3.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



COVD, Я этого не могу себе позволить.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
COVD
Дата 23.3.2008, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



 smile чего "этого"? 
PM MAIL   Вверх
w1nd
Дата 24.3.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Royan, шаблон Command, реализованный в Swing (javax.swing.Action), вас не устраивает? И вообще, при чём здесь MVC? Зачем пихать MVC туда, где он вообще неприменим? 

Если уж так хотите всю логику размазать тонким слоем, сделайте себе глобальный диспетчер событий. Ткнули в меню - событие, кому надо - подпишутся.

Это сообщение отредактировал(а) w1nd - 24.3.2008, 00:11


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Royan
Дата 25.3.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Цитата(COVD @  23.3.2008,  19:59 Найти цитируемый пост)
чего "этого"?  

Цитата(COVD @  23.3.2008,  18:37 Найти цитируемый пост)
Nетбинc 6 есть тип проекта - DesktopApplication

Ну если коротко, то я ограничен только использованием классов, входящих в core java API 1.6 соответственно данный подход для меня невозможен, да и потом как вы сами сказали на изучение этого framework'а уйдет столько времени что кто то успеет написать новый.

w1nd, Насчет шаблона, можно пример, я не совсем понимаю как он относится к моей задаче. Глобальный диспетчер событий он же и есть глобальный Controller о котором я говорю в конце своего оригинального поста. Если вы имели ввиду что-то другое, пожалуйста, поясните.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
w1nd
Дата 25.3.2008, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Цитата(Royan @  25.3.2008,  00:22 Найти цитируемый пост)
w1nd, Насчет шаблона, можно пример, я не совсем понимаю как он относится к моей задаче.

Вы спрашиваете: "То есть отработал код в MenuController, далее ... тут у меня начинаются вопросы. По идее я должен сообщить FrameController, что был открыт файл и он должен уже его обработать и направить данные в MenuController, так?"

1. Зачем сообщать кому-либо о необходимости открывать файл, если в соответствующем пункте меню должен быть Action, который и файл откроет и вполнит все сопутствующие процедуры?
2. Зачем данные в MenuController?

Зачем вообще MenuController? Что-то вроде глобального контекста, хранящего состояния всех и вся?

Это сообщение отредактировал(а) w1nd - 25.3.2008, 00:35


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Royan
Дата 25.3.2008, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Цитата(w1nd @  24.3.2008,  21:31 Найти цитируемый пост)
сли в соответствующем пункте меню должен быть Action

Окей я не спорю, но можно пример кода с использованием Action'а? Я никогда с ними не имел дела.

Добавлено через 4 минуты и 9 секунд
Или речь идет об обработке в методе actionPerformed ActionEvent'ов?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Kangaroo
Дата 25.3.2008, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104



Цитата(Royan @  25.3.2008,  00:19 Найти цитируемый пост)
Окей я не спорю, но можно пример кода с использованием Action'а? 

How to use actions


--------------------
Lost....
PM MAIL MSN   Вверх
Royan
Дата 25.3.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 1
Всего: 15



Kangaroo, Спасибо за ссылку. В общем, из прочтенного я так понял что Action'ы это то что было до того как придумали вышеозвученный паттерн. Я также не нашел преимуществ Action'ов перед Controller'ом. И там и там надо писать класс (наследник AbstractAction в первом случае и собственно Controller во втором) разница лишь в том, что наследник AbstractAction выходит более специфицированным, потому что используется только с конкретным набором GUI элементов (Кнопки, пункты меню, текстовые поля и все). Controller же обычно пишется таким образом, что в нем имплементируются все интерфейсы (например, PropertyChangeListener для той же модели) В общем я пока склоняюсь написать один внутренний класс контроллер в корневом классе окна своего приложения. Так мне кажется будет задан простор для дальнейшей разработки, то есть когда мне вдруг понадобятся custom свойства я легко смогу создать класс модели и подключить обработку событий к Controller'у. А все меню и кнопки запросто смогут уже сейчас взять себе actionHandler'ами экземпляр класса Controller.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
w1nd
Дата 25.3.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Цитата(Royan @  25.3.2008,  17:20 Найти цитируемый пост)
В общем, из прочтенного я так понял что Action'ы это то что было до того как придумали вышеозвученный паттерн. <...> Я также не нашел преимуществ Action'ов перед Controller'ом.

 smile 




--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
COVD
Дата 27.3.2008, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

Ну если коротко, то я ограничен только использованием классов, входящих в core java API 1.6 соответственно данный подход для меня невозможен, да и потом как вы сами сказали на изучение этого framework'а уйдет столько времени что кто то успеет написать новый.


Ну, это я роптал. DesktopApplication можно рассматривать, как пример реализации идеи акшинов и некоторых других прогрессивных приемов, которые можно копировать не приходя в сознание  smile . 



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0978 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.