Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка Windows Forms > Использование патерна MVP |
Автор: infarch 31.10.2013, 17:21 | ||
Здравствуйте. Пытаюсь разобраться с патерном MVP. Сделал форму, связал с моделью через представление.
Теперь представление принимает события от формы и передает в модель. Пока все понятно. Но вот мне понадобилось отобразить еще одну форму для заполнения и потом вернуться в главную. Вопрос: где правильнее разместить этот код? В модели, представлении или главной форме? Я вообще склоняюсь к тому что в представлении, но так ли это?.. |
Автор: dzaraev 1.11.2013, 07:35 |
Во-первых закройте MainForm абстракцией, например IMainView, иначе MVP нафиг не нужен. Далее, ИМХО конечно, но в 99.9% случаев решение о показе диалогов и доп. окон должен принимать Презентер, а значит ему необходимо предоставить соответствующую инфраструктуру, либо добавить соответствующие методы в само представление. Например добавить метод IMainView.NotifyUser(string message) и вызывать его из презентера тогда, когда он (презентер) посчитает нужным. Форма же реализует этот интерфейс и делает что-то вроде MessageBox.Show и т.д. Таким образом вы полностью отвязываете презентер от специфических классов UI слоя (MainForm, MessageBox и т.д.) и делаете возможным заменить реализацию представления на любую другую (что является одной из основных фичей MVP и подобных шаблонов). |
Автор: infarch 1.11.2013, 11:22 |
Поскольку я к этому патерну только присматриваюсь, то сразу все детали не охватил. Допустим, я завернул форму в IMainView. Как мне привязать презентер к кнопке на форме? Не угостите ли годным примером, желательно попроще? И вот еще вопрос: вы пишете "делаете возможным заменить реализацию представления на любую другую". Вы имеете в виду presenter или view? Если презентер, то я не понимаю, зачем его на что-то менять? Другое дело вью, там можно сменить форму на асп страницу например. |
Автор: infarch 1.11.2013, 14:45 |
Ситуация проясняется... Спасибо за ответ, осмыслю и опробую. |