Silverlight/WPF: возврат от паттерна MVVM к MVP

advertisement
Silverlight/WPF: возврат от
паттерна MVVM к MVP
Гладких Денис
http://outcoldman.ru
История
• Первое упоминание паттерна MVC в Smalltalk’80
• Задача: архитектурное решение, которое
позволяло бы манипулировать графическими
представлениями данных приложения таким
образом, чтобы изменение Представления этих
данных не влияло на бизнес-логику и данные
(Модель) приложения, а так же, чтобы была
возможность иметь
несколько Представлений для одной Модели.
Термины
• Model (модель данных) - бизнес логика
вашего приложения;
• View (представление) – пользовательский
интерфейс;
• Controller (контроллер) - содержит логику
на изменение модели при определенных
действиях пользователя;
Классический MVC
Действия
пользователя
Передача
вызова
View
Сообщение
об изменениях
Изменение
модели
Controller
Model
Реализация
UserEditView
Пользователь
нажал Apply
UserEditController
Model
(User,Repository)
controller.UpdateUser(
textBoxName.Text,
…
)
user.Name = name;
repository.Save(user);
Сообщить об изменении
(INotifyPropertyChanged)
Model – View – Presenter
Действия
пользователя
1. Passive View
2. Supervising Controller
View
Передача
вызова
Обновление
Изменение
модели
Presenter
Model
Сообщение
об изменениях
Реализация
IUserEditView
UserEditView
UserEditPresenter
Model
(User,Repository)
Реализация
UserEditView
UserEditPresenter
Model
(User,Repository)
Пользователь
нажал Apply
presenter.UpdateUser( );
name = view.UserName;
user.Name = name;
repository.Save(user);
view.UserName = user.Name;
Silverlight/WPF Binding
INotifyPropertyChanged
INotifyCollectionChanged
DependencyObject
View
МАГИЯ
TextBox
UserName
Button
Command
Controller
Model – View – Presenter
Действия
пользователя
View
Передача
вызова
Обновление
Изменение
модели
Presenter
Model
Сообщение
об изменениях
Model – View – ViewModel
Действия
пользователя
View
Передача
вызова
Обновление
Изменение
модели
ViewModel
Model
Сообщение
об изменениях
Реализация
Магия
UserEditView
UserEditViewModel
Model
(User,Repository)
Пользователь
нажал Apply
ExecuteSaveCommand()
name = UserName;
user.Name = name;
repository.Save(user);
TextBox получит актуальное
значение
Задачи (View / ViewModel)
Установка
значений в
соответствующие
контролы
View
Визуализация
контролов
Связь/взаимодей
ствие с моделью
Валидация
измененных /
новых данных
ViewModel
Создание данных
(из Модели) для
отображения
BindingModel
Создание данных
BindingModel . (из Модели)
.
. для
отображения
View
Валидация
измененных /
новых данных
Presenter
ViewModel
Связь/взаимодей
. .
ствие с моделью
Demo (by Davy Brion)
Silverlight/WPF: возврат от
паттерна MVVM к MVP
Гладких Денис (outcoldman)
• http://outcoldman.ru
• http://twitter.com/outcoldman
• outcoldman@gmail.com
Download