![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Здравствуйте.
Пытаюсь разобраться с патерном MVP. Сделал форму, связал с моделью через представление.
Теперь представление принимает события от формы и передает в модель. Пока все понятно. Но вот мне понадобилось отобразить еще одну форму для заполнения и потом вернуться в главную. Вопрос: где правильнее разместить этот код? В модели, представлении или главной форме? Я вообще склоняюсь к тому что в представлении, но так ли это?.. |
|||
|
||||
dzaraev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
Во-первых закройте MainForm абстракцией, например IMainView, иначе MVP нафиг не нужен.
Далее, ИМХО конечно, но в 99.9% случаев решение о показе диалогов и доп. окон должен принимать Презентер, а значит ему необходимо предоставить соответствующую инфраструктуру, либо добавить соответствующие методы в само представление. Например добавить метод IMainView.NotifyUser(string message) и вызывать его из презентера тогда, когда он (презентер) посчитает нужным. Форма же реализует этот интерфейс и делает что-то вроде MessageBox.Show и т.д. Таким образом вы полностью отвязываете презентер от специфических классов UI слоя (MainForm, MessageBox и т.д.) и делаете возможным заменить реализацию представления на любую другую (что является одной из основных фичей MVP и подобных шаблонов). Это сообщение отредактировал(а) dzaraev - 1.11.2013, 07:37 --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Поскольку я к этому патерну только присматриваюсь, то сразу все детали не охватил. Допустим, я завернул форму в IMainView. Как мне привязать презентер к кнопке на форме? Не угостите ли годным примером, желательно попроще? И вот еще вопрос: вы пишете "делаете возможным заменить реализацию представления на любую другую". Вы имеете в виду presenter или view? Если презентер, то я не понимаю, зачем его на что-то менять? Другое дело вью, там можно сменить форму на асп страницу например.
|
|||
|
||||
dzaraev |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
В идеале презентер ни про какие "батоны" и "камбабоксы" знать не должен, он должен по возможности работать с более предметной семантикой. Например: ваша кнопка должна приводить к подтверждению ввода пользователя, вы высовываете в IMainView событие SubmitRequested и реализуете его в MainForm. Затем вы добавляете обработчик на клик кнопочки (внутри MainForm) и в этом обработчике вызываете OnSubmitRequested. Презентер при получении в себя IMainView должен подписаться на данное событие и в ответ на него что-то адекватное сделать. Ну допустим он поковыряет данные, которые пользователь пытается сабмитить и решит - можно сабмитить или нет, если нет, то презентер вызовет IMainView.NotifyUser("нельзя сохранить, вы не ввели ФИО"). Если же всё в порядке, то презентер может протолкнуть данные ниже - в слой модели, а представлению сказать что-то типа IMainView.NotifyUser("аккаунт успешно сохранён").
Конечно я имел в виду View, просто по-русски - "view" это "представление". --------------------
Если вопрос решён - помечайте тему. |
||||
|
|||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
Ситуация проясняется... Спасибо за ответ, осмыслю и опробую.
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |