MVP: понять во View, были ли изменения в данных
От: m a d Россия  
Дата: 28.06.11 19:46
Оценка:
Доброго времени суток!

Задал сначала этот вопрос на хабре, но добрые хабражители его моментально отхабрили. Прошу прощения, если действительно спрашиваю глупость.

Дано: приложение на C#/WinForms, которое пытается следовать паттерну MVP.
View представляет собой форму с гридом, в гриде есть данные. Также есть кнопочки, которые с этими данными что-то делают. View не знает, что. Он просто генерит по нажатию кнопок события, которые обрабатываются презентером.

Задача: при закрытии формы необходимо понять, были ли изменения в данных, и если были, то спросить, сохранять ли их.

Варианты, которые приходят в голову (но ни один из них не нравится):
1. По нажатию кнопок сделать вывод, что данные поменялись.
2. Спрашивать о сохранении из презентера (только что пришел в голову более конкретный вариант: из презентера вызвать IView.ShowSaveDialog() c возвратом DialogResult)
3. Генерировать событие типа «а не было ли изменений?» с аргументами а ля CancelEventArgs

Посоветуйте, пожалуйста, как правильно поступить.
mvp winforms c#
Re: MVP: понять во View, были ли изменения в данных
От: Ed.ward Россия  
Дата: 28.06.11 21:07
Оценка: +2
Здравствуйте, m a d, Вы писали:

MAD>Доброго времени суток!


MAD>Задал сначала этот вопрос на хабре, но добрые хабражители его моментально отхабрили. Прошу прощения, если действительно спрашиваю глупость.


MAD>Дано: приложение на C#/WinForms, которое пытается следовать паттерну MVP.

MAD>View представляет собой форму с гридом, в гриде есть данные. Также есть кнопочки, которые с этими данными что-то делают. View не знает, что. Он просто генерит по нажатию кнопок события, которые обрабатываются презентером.

MAD>Задача: при закрытии формы необходимо понять, были ли изменения в данных, и если были, то спросить, сохранять ли их.


MAD>2. Спрашивать о сохранении из презентера (только что пришел в голову более конкретный вариант: из презентера вызвать IView.ShowSaveDialog() c возвратом DialogResult)


Именно так. Этот подход позволит покрыть автоматическими тестами логику сохранения данных.
View только говорит, что хочет закрыться. Презентер знает, что делать по закрытию, спрашивать/не спрашивать, сохранять/не сохранять, и в конце концов а закрывать ли View.

Ed.ward
Re[2]: MVP: понять во View, были ли изменения в данных
От: m a d Россия  
Дата: 29.06.11 08:57
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Здравствуйте, m a d, Вы писали:


MAD>>Доброго времени суток!


MAD>>Задал сначала этот вопрос на хабре, но добрые хабражители его моментально отхабрили. Прошу прощения, если действительно спрашиваю глупость.


MAD>>Дано: приложение на C#/WinForms, которое пытается следовать паттерну MVP.

MAD>>View представляет собой форму с гридом, в гриде есть данные. Также есть кнопочки, которые с этими данными что-то делают. View не знает, что. Он просто генерит по нажатию кнопок события, которые обрабатываются презентером.

MAD>>Задача: при закрытии формы необходимо понять, были ли изменения в данных, и если были, то спросить, сохранять ли их.


MAD>>2. Спрашивать о сохранении из презентера (только что пришел в голову более конкретный вариант: из презентера вызвать IView.ShowSaveDialog() c возвратом DialogResult)


EW>Именно так. Этот подход позволит покрыть автоматическими тестами логику сохранения данных.

EW>View только говорит, что хочет закрыться. Презентер знает, что делать по закрытию, спрашивать/не спрашивать, сохранять/не сохранять, и в конце концов а закрывать ли View.

EW>Ed.ward


Спасибо за ответ!
Единственное, что меня смущает — это то, что разбор DialogResult тянет в Presenter зависимость System.Windows.Forms. Закрыть на это глаза? Написать свой DialogResult с океями и кэнсэлами?
Re[3]: MVP: понять во View, были ли изменения в данных
От: Ed.ward Россия  
Дата: 29.06.11 09:12
Оценка: +1
Здравствуйте, m a d, Вы писали:

MAD>Здравствуйте, Ed.ward, Вы писали:


EW>>Здравствуйте, m a d, Вы писали:


MAD>>>Доброго времени суток!


MAD>>>Задал сначала этот вопрос на хабре, но добрые хабражители его моментально отхабрили. Прошу прощения, если действительно спрашиваю глупость.


MAD>>>Дано: приложение на C#/WinForms, которое пытается следовать паттерну MVP.

MAD>>>View представляет собой форму с гридом, в гриде есть данные. Также есть кнопочки, которые с этими данными что-то делают. View не знает, что. Он просто генерит по нажатию кнопок события, которые обрабатываются презентером.

MAD>>>Задача: при закрытии формы необходимо понять, были ли изменения в данных, и если были, то спросить, сохранять ли их.


MAD>>>2. Спрашивать о сохранении из презентера (только что пришел в голову более конкретный вариант: из презентера вызвать IView.ShowSaveDialog() c возвратом DialogResult)


EW>>Именно так. Этот подход позволит покрыть автоматическими тестами логику сохранения данных.

EW>>View только говорит, что хочет закрыться. Презентер знает, что делать по закрытию, спрашивать/не спрашивать, сохранять/не сохранять, и в конце концов а закрывать ли View.

EW>>Ed.ward


MAD>Спасибо за ответ!

MAD>Единственное, что меня смущает — это то, что разбор DialogResult тянет в Presenter зависимость System.Windows.Forms. Закрыть на это глаза? Написать свой DialogResult с океями и кэнсэлами?

Я написал свой и конвертилку Считаю что зависимость опасней, чем дополнительная сущность.

Ed.ward
Re[4]: MVP: понять во View, были ли изменения в данных
От: m a d Россия  
Дата: 04.07.11 07:21
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Здравствуйте, m a d, Вы писали:


MAD>>Здравствуйте, Ed.ward, Вы писали:


EW>>>Здравствуйте, m a d, Вы писали:


MAD>>>>Доброго времени суток!


MAD>>>>Задал сначала этот вопрос на хабре, но добрые хабражители его моментально отхабрили. Прошу прощения, если действительно спрашиваю глупость.


MAD>>>>Дано: приложение на C#/WinForms, которое пытается следовать паттерну MVP.

MAD>>>>View представляет собой форму с гридом, в гриде есть данные. Также есть кнопочки, которые с этими данными что-то делают. View не знает, что. Он просто генерит по нажатию кнопок события, которые обрабатываются презентером.

MAD>>>>Задача: при закрытии формы необходимо понять, были ли изменения в данных, и если были, то спросить, сохранять ли их.


MAD>>>>2. Спрашивать о сохранении из презентера (только что пришел в голову более конкретный вариант: из презентера вызвать IView.ShowSaveDialog() c возвратом DialogResult)


EW>>>Именно так. Этот подход позволит покрыть автоматическими тестами логику сохранения данных.

EW>>>View только говорит, что хочет закрыться. Презентер знает, что делать по закрытию, спрашивать/не спрашивать, сохранять/не сохранять, и в конце концов а закрывать ли View.

EW>>>Ed.ward


MAD>>Спасибо за ответ!

MAD>>Единственное, что меня смущает — это то, что разбор DialogResult тянет в Presenter зависимость System.Windows.Forms. Закрыть на это глаза? Написать свой DialogResult с океями и кэнсэлами?

EW>Я написал свой и конвертилку Считаю что зависимость опасней, чем дополнительная сущность.


EW>Ed.ward


В итоге я так и сделал =) Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.