Upload
denis-gladkikh
View
1.762
Download
1
Embed Size (px)
DESCRIPTION
Presentation from Application Developers Days 2010
Citation preview
Silverlight/WPF: возврат от паттерна MVVM к MVP
Гладких Денисhttp://outcoldman.ru
История
• Первое упоминание паттерна MVC в Smalltalk’80• Задача: архитектурное решение, которое
позволяло бы манипулировать графическими представлениями данных приложения таким образом, чтобы изменение Представления этих данных не влияло на бизнес-логику и данные (Модель) приложения, а так же, чтобы была возможность иметь несколько Представлений для одной Модели.
Термины
• Model (модель данных) - бизнес логика вашего приложения;
• View (представление) – пользовательский интерфейс;
• Controller (контроллер) - содержит логику на изменение модели при определенных действиях пользователя;
Классический MVC
View
ModelController
Действия пользователя
Передача вызова
Изменениемодели
Сообщениеоб изменениях
Реализация
UserEditView UserEditController Model (User,Repository)
Пользователь нажал Apply controller.UpdateUser(
textBoxName.Text,…)
user.Name = name;
repository.Save(user);
Сообщить об изменении (INotifyPropertyChanged)
Model – View – Presenter
View
ModelPresenter
Действия пользователя
Передача вызова Изменение
модели
Сообщениеоб изменениях
Обновление
1. Passive View2. Supervising Controller
Реализация
UserEditView UserEditPresenter
Model (User,Repository)
IUserEditView
Реализация
UserEditView UserEditPresenterModel
(User,Repository)
Пользователь нажал Apply
presenter.UpdateUser( );
user.Name = name;
repository.Save(user);
name = view.UserName;
view.UserName = user.Name;
INotifyPropertyChangedINotifyCollectionChanged
DependencyObject
Silverlight/WPF Binding
View Controller
Button
TextBox UserName
Command
МАГИЯ
Model – View – Presenter
View
ModelPresenter
Действия пользователя
Передача вызова Изменение
модели
Сообщениеоб изменениях
Обновление
Model – View – ViewModel
View
ModelViewModel
Действия пользователя
Передача вызова Изменение
модели
Сообщениеоб изменениях
Обновление
Реализация
UserEditView UserEditViewModelModel
(User,Repository)
Пользователь нажал Apply
ExecuteSaveCommand()
user.Name = name;
repository.Save(user);
name = UserName;
TextBox получит актуальное значение
Магия
View ViewModel
Задачи (View / ViewModel)
Визуализация контролов
Установка значений в
соответствующие контролы
Связь/взаимодействие
с моделью
Создание данных (из Модели) для
отображения
Валидация измененных / новых данных
ViewModel . .
BindingModel
View
BindingModel . . .
Связь/взаимодействие
с моделью
Создание данных (из Модели) для
отображенияВалидация
измененных / новых данных
Presenter
Demo (by Davy Brion)
Silverlight/WPF: возврат от паттерна MVVM к MVPГладких Денис (outcoldman)
• http://outcoldman.ru • http://twitter.com/outcoldman• [email protected]