Add2010 - Silverlight/WPF: MVP&MVVM

Preview:

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• outcoldman@gmail.com

Recommended