Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование патерна MVP 
:(
    Опции темы
infarch
Дата 31.10.2013, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте.

Пытаюсь разобраться с патерном MVP. Сделал форму, связал с моделью через представление.

Код

    public partial class MainForm : Form
    {
        MainPresenter presenter;

        public MainForm()
        {
            InitializeComponent();
            presenter = new MainPresenter(this);
        }
    }


Теперь представление принимает события от формы и передает в модель. Пока все понятно.
Но вот мне понадобилось отобразить еще одну форму для заполнения и потом вернуться в главную. Вопрос: где правильнее разместить этот код? В модели, представлении или главной форме? Я вообще склоняюсь к тому что в представлении, но так ли это?..
PM MAIL   Вверх
dzaraev
Дата 1.11.2013, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
infarch
Дата 1.11.2013, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Поскольку я к этому патерну только присматриваюсь, то сразу все детали не охватил. Допустим, я завернул форму в IMainView. Как мне привязать презентер к кнопке на форме? Не угостите ли годным примером, желательно попроще? И вот еще вопрос: вы пишете "делаете возможным заменить реализацию представления на любую другую". Вы имеете в виду presenter или view? Если презентер, то я не понимаю, зачем его на что-то менять? Другое дело вью, там можно сменить форму на асп страницу например.
PM MAIL   Вверх
dzaraev
Дата 1.11.2013, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(infarch @  1.11.2013,  11:22 Найти цитируемый пост)
Допустим, я завернул форму в IMainView. Как мне привязать презентер к кнопке на форме?

В идеале презентер ни про какие "батоны" и "камбабоксы" знать не должен, он должен по возможности работать с более предметной семантикой. 
Например: ваша кнопка должна приводить к подтверждению ввода пользователя, вы высовываете в IMainView событие SubmitRequested и реализуете его в MainForm. Затем вы добавляете обработчик на клик кнопочки (внутри MainForm) и в этом обработчике вызываете OnSubmitRequested. Презентер при получении в себя IMainView должен подписаться на данное событие и в ответ на него что-то адекватное сделать. Ну допустим он поковыряет данные, которые пользователь пытается сабмитить и решит - можно сабмитить или нет, если нет, то презентер вызовет IMainView.NotifyUser("нельзя сохранить, вы не ввели ФИО"). Если же всё в порядке, то презентер может протолкнуть данные ниже - в слой модели, а представлению сказать что-то типа IMainView.NotifyUser("аккаунт успешно сохранён").

Цитата(infarch @  1.11.2013,  11:22 Найти цитируемый пост)
 вы пишете "делаете возможным заменить реализацию представления на любую другую".  Вы имеете в виду presenter или view? 

Конечно я имел в виду View, просто по-русски - "view" это "представление".


--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
infarch
Дата 1.11.2013, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ситуация проясняется... Спасибо за ответ, осмыслю и опробую.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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