mvvm in wpf

Post on 24-Jun-2015

371 Views

Category:

Technology

30 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MVVM

План

Проблемы, которые решает MVVM

Обзор MVVM

Command pattern

MVVM - подходы

Простой пример

Типичные проблемы

Сильная связность кода и UI

Тяжело разделить состояние UI и логику его работы с логикой отображения

Тяжело протестировать состояние и работу UI

MVVM

Разделение интересов и ответственности

Воможность тестировать состояние UI и логику его работы, не заботясь о представлении

Потенциальная раздельная работа разработчика и UI дизайнера

Separation of conserns

View ViewModel Modelnotifications

data binding

commands

UI state and logicUI Business logic and data

Ideal for xaml

DataBinding - DataContext, DependencyProperty

Commands - ICommand, Blend interactions

View ViewModelnotifications

data binding

commands

UI state and logicUI

Testability

Состояние UI и логика его работы не зависит от представления

Возможность «запустить» приложение в юнит-тестах без UI

View ViewModel Modelnotifications

data binding

commands

UI state and logicUI Business logic and data

View

Структура UI

DataContext = ViewModel

Минималистичность, нет code behind

Данные из Binding

Взаимодействие с ViewModel через команды

View ViewModel Modelnotifications

data binding

commands

UI state and logicUI Business logic and data

ViewModel

Предоставляет Bindable свойства (INPC)

Предоставляет команды (ICommand)

Взаимодейтсвует с моделью

Не знает о View

Полностью тестируема

KISS, не забывая про SRP

View ViewModel Modelnotifications

data binding

commands

UI state and logicUI Business logic and data

Model

BL, данные, клиентская объектная модель

Bindable свойства, которые могут использоваться View напрямую или через ViewModel в качестве адаптера

View ViewModel Modelnotifications

data binding

commands

UI state and logicUI Business logic and data

Команды

Выполняются View при пользовательском взаимодейтсвии (клики, ввод с клавиатуры и т.п.)

ICommand, DelegateCommand, custom commands, etc.

View ViewModel Modelnotifications

data binding

commands

UI state and logicUI Business logic and data

Command pattern

Объект, представляющий собой дейтсвие

Инкапсулирует само действие и его параметры

Command pattern

Undo/redo

UI макросы

Транзакции

Очереди выполнения

Command pattern in WPF

interface ICommand{

bool CanExecute(object);void Execute(object);event EventHandler CanExecuteChanged;

}

Внедряем MVVM

Слабая связность между View и ViewModel

Слабая связность между ViewModel и Model

View рассматривайте как шаблон для представления данных

View минималистична, нет code behind

ViewModel создаётся первой и устанавливается View как DataContext

Используется Dependency injection / IoC

Подходы

View-first

ViewModel-first

View-first

xamly. View ссылается на ViewModel (DataBinding)

perfect for modern WPF

ViewModel-first (MVP-like)

class ViewModel{

public ViewModel(IView view){}

}

Marriage

interface IView{

void ApplyViewModel(object viewModel);}IView view = container.Resolve<IGameView>();IViewModel container.Resolve<IGameViewModel>();view.ApplyViewModel(vm);

top related