16
Silverlight/WPF: возврат от паттерна MVVM к MVP Гладких Денис http ://outcoldman.ru

Add2010 - Silverlight/WPF: MVP&MVVM

Embed Size (px)

DESCRIPTION

Presentation from Application Developers Days 2010

Citation preview

Page 1: Add2010 - Silverlight/WPF: MVP&MVVM

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

Гладких Денисhttp://outcoldman.ru

Page 2: Add2010 - Silverlight/WPF: MVP&MVVM

История

• Первое упоминание паттерна MVC в Smalltalk’80• Задача: архитектурное решение, которое

позволяло бы манипулировать графическими представлениями данных приложения таким образом, чтобы изменение Представления этих данных не влияло на бизнес-логику и данные (Модель) приложения, а так же, чтобы была возможность иметь несколько Представлений для одной Модели.

Page 3: Add2010 - Silverlight/WPF: MVP&MVVM

Термины

• Model (модель данных) - бизнес логика вашего приложения;

• View (представление) – пользовательский интерфейс;

• Controller (контроллер) - содержит логику на изменение модели при определенных действиях пользователя;

Page 4: Add2010 - Silverlight/WPF: MVP&MVVM

Классический MVC

View

ModelController

Действия пользователя

Передача вызова

Изменениемодели

Сообщениеоб изменениях

Page 5: Add2010 - Silverlight/WPF: MVP&MVVM

Реализация

UserEditView UserEditController Model (User,Repository)

Пользователь нажал Apply controller.UpdateUser(

textBoxName.Text,…)

user.Name = name;

repository.Save(user);

Сообщить об изменении (INotifyPropertyChanged)

Page 6: Add2010 - Silverlight/WPF: MVP&MVVM

Model – View – Presenter

View

ModelPresenter

Действия пользователя

Передача вызова Изменение

модели

Сообщениеоб изменениях

Обновление

1. Passive View2. Supervising Controller

Page 7: Add2010 - Silverlight/WPF: MVP&MVVM

Реализация

UserEditView UserEditPresenter

Model (User,Repository)

IUserEditView

Page 8: Add2010 - Silverlight/WPF: MVP&MVVM

Реализация

UserEditView UserEditPresenterModel

(User,Repository)

Пользователь нажал Apply

presenter.UpdateUser( );

user.Name = name;

repository.Save(user);

name = view.UserName;

view.UserName = user.Name;

Page 9: Add2010 - Silverlight/WPF: MVP&MVVM

INotifyPropertyChangedINotifyCollectionChanged

DependencyObject

Silverlight/WPF Binding

View Controller

Button

TextBox UserName

Command

МАГИЯ

Page 10: Add2010 - Silverlight/WPF: MVP&MVVM

Model – View – Presenter

View

ModelPresenter

Действия пользователя

Передача вызова Изменение

модели

Сообщениеоб изменениях

Обновление

Page 11: Add2010 - Silverlight/WPF: MVP&MVVM

Model – View – ViewModel

View

ModelViewModel

Действия пользователя

Передача вызова Изменение

модели

Сообщениеоб изменениях

Обновление

Page 12: Add2010 - Silverlight/WPF: MVP&MVVM

Реализация

UserEditView UserEditViewModelModel

(User,Repository)

Пользователь нажал Apply

ExecuteSaveCommand()

user.Name = name;

repository.Save(user);

name = UserName;

TextBox получит актуальное значение

Магия

Page 13: Add2010 - Silverlight/WPF: MVP&MVVM

View ViewModel

Задачи (View / ViewModel)

Визуализация контролов

Установка значений в

соответствующие контролы

Связь/взаимодействие

с моделью

Создание данных (из Модели) для

отображения

Валидация измененных / новых данных

Page 14: Add2010 - Silverlight/WPF: MVP&MVVM

ViewModel . .

BindingModel

View

BindingModel . . .

Связь/взаимодействие

с моделью

Создание данных (из Модели) для

отображенияВалидация

измененных / новых данных

Presenter

Page 15: Add2010 - Silverlight/WPF: MVP&MVVM

Demo (by Davy Brion)

Page 16: Add2010 - Silverlight/WPF: MVP&MVVM

Silverlight/WPF: возврат от паттерна MVVM к MVPГладких Денис (outcoldman)

• http://outcoldman.ru • http://twitter.com/outcoldman• [email protected]