MVVM in WPF

Sviataslau Seviaryn
Sviataslau SeviarynSoftware Engineer à SaM Solutions
MVVM
План

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

Обзор MVVM

Command pattern

MVVM - подходы

Простой пример
Типичные проблемы


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

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

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

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

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

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


       notifications



View   data binding

       commands
                      ViewModel                  Model

 UI                   UI state and logic   Business logic and data
Ideal for xaml
                notifications



       View     data binding

                commands
                               ViewModel

         UI                    UI state and logic

DataBinding - DataContext,
DependencyProperty

Commands - ICommand, Blend interactions
Testability
        notifications



View   data binding

        commands
                       ViewModel                  Model

 UI                    UI state and logic   Business logic and data


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

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



View       data binding

           commands
                          ViewModel                  Model

  UI                      UI state and logic   Business logic and data
Структура UI

DataContext = ViewModel

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

Данные из Binding

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



View          data binding

                  commands
                             ViewModel                  Model

  UI                         UI state and logic   Business logic and data
Предоставляет Bindable свойства (INPC)


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


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


Не знает о View


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


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



View    data binding

        commands
                       ViewModel                  Model

 UI                    UI state and logic   Business logic and data

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

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



View    data binding

         commands
                       ViewModel                  Model

 UI                    UI state and logic   Business logic and data

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

ICommand, DelegateCommand, custom commands, etc.
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);
1 sur 19

Recommandé

Mvc, mvp and mvvm: A comparison of architectural patterns par
Mvc, mvp and mvvm: A comparison of architectural patternsMvc, mvp and mvvm: A comparison of architectural patterns
Mvc, mvp and mvvm: A comparison of architectural patternsIvan Dyachenko
2.6K vues34 diapositives
Balashov par
BalashovBalashov
Balashovkuchinskaya
685 vues63 diapositives
Разработка WPF приложений в стиле ViewModel First par
Разработка WPF приложений в стиле ViewModel FirstРазработка WPF приложений в стиле ViewModel First
Разработка WPF приложений в стиле ViewModel FirstDenis Tsvettsih
2.4K vues46 diapositives
Паттерны проектирования par
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
127 vues26 diapositives
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS par
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOSОмские ИТ-субботники
404 vues41 diapositives
django.pdf par
django.pdfdjango.pdf
django.pdfAntonPolovnikov1
5 vues8 diapositives

Contenu connexe

Similaire à MVVM in WPF

The MVC Renaissance | Возрождение MVC par
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCBulat Khabirov
552 vues10 diapositives
iOS-02-Паттерны ООП par
iOS-02-Паттерны ООПiOS-02-Паттерны ООП
iOS-02-Паттерны ООПNoveo
618 vues13 diapositives
Архитектурный шаблон MVC par
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVCUnguryan Vitaliy
4K vues7 diapositives
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers par
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
1.5K vues62 diapositives
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN] par
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]Binwell
921 vues30 diapositives
ПартФорум DIRECTUM 2013 - разработка прикладных решений par
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийВиктор Золотов
503 vues41 diapositives

Similaire à MVVM in WPF(20)

The MVC Renaissance | Возрождение MVC par Bulat Khabirov
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVC
Bulat Khabirov552 vues
iOS-02-Паттерны ООП par Noveo
iOS-02-Паттерны ООПiOS-02-Паттерны ООП
iOS-02-Паттерны ООП
Noveo618 vues
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers par Глеб Тарасов
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN] par Binwell
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
Binwell921 vues
ПартФорум DIRECTUM 2013 - разработка прикладных решений par Виктор Золотов
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од... par GoSharp
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
GoSharp1.2K vues
AngularJS basics & theory par DevOWL Meetup
AngularJS basics & theoryAngularJS basics & theory
AngularJS basics & theory
DevOWL Meetup40.2K vues
чмв лекция №5 par student_kai
чмв   лекция №5чмв   лекция №5
чмв лекция №5
student_kai747 vues
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext par GoSharp
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
GoSharp1.2K vues
Создание повторно используемых бизнес моделей с помощью технологии Domain Com... par GetDev.NET
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
GetDev.NET1.5K vues
Moxy. Из чего состоит и как этим пользоваться par Yuri Shmakov
Moxy. Из чего состоит и как этим пользоватьсяMoxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоваться
Yuri Shmakov5.2K vues
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS par Глеб Тарасов
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Oracle ADF для Java EE разработчика par Dmitry Nefedkin
Oracle ADF для Java EE разработчикаOracle ADF для Java EE разработчика
Oracle ADF для Java EE разработчика
Dmitry Nefedkin2.3K vues
Архитектура для автоматизированного тестирования UI par Anton Bevzuk
Архитектура для автоматизированного тестирования UIАрхитектура для автоматизированного тестирования UI
Архитектура для автоматизированного тестирования UI
Anton Bevzuk729 vues
Модельно-ориентированная инженерия в MATLAB и Simulink par Alexander Efremov
Модельно-ориентированная инженерия в MATLAB и SimulinkМодельно-ориентированная инженерия в MATLAB и Simulink
Модельно-ориентированная инженерия в MATLAB и Simulink
Alexander Efremov3.5K vues

MVVM in WPF

  • 2. План Проблемы, которые решает MVVM Обзор MVVM Command pattern MVVM - подходы Простой пример
  • 3. Типичные проблемы Сильная связность кода и UI Тяжело разделить состояние UI и логику его работы с логикой отображения Тяжело протестировать состояние и работу UI
  • 4. MVVM Разделение интересов и ответственности Воможность тестировать состояние UI и логику его работы, не заботясь о представлении Потенциальная раздельная работа разработчика и UI дизайнера
  • 5. Separation of conserns notifications View data binding commands ViewModel Model UI UI state and logic Business logic and data
  • 6. Ideal for xaml notifications View data binding commands ViewModel UI UI state and logic DataBinding - DataContext, DependencyProperty Commands - ICommand, Blend interactions
  • 7. Testability notifications View data binding commands ViewModel Model UI UI state and logic Business logic and data Состояние UI и логика его работы не зависит от представления Возможность «запустить» приложение в юнит- тестах без UI
  • 8. View notifications View data binding commands ViewModel Model UI UI state and logic Business logic and data Структура UI DataContext = ViewModel Минималистичность, нет code behind Данные из Binding Взаимодействие с ViewModel через команды
  • 9. ViewModel notifications View data binding commands ViewModel Model UI UI state and logic Business logic and data Предоставляет Bindable свойства (INPC) Предоставляет команды (ICommand) Взаимодейтсвует с моделью Не знает о View Полностью тестируема KISS, не забывая про SRP
  • 10. Model notifications View data binding commands ViewModel Model UI UI state and logic Business logic and data BL, данные, клиентская объектная модель Bindable свойства, которые могут использоваться View напрямую или через ViewModel в качестве адаптера
  • 11. Команды notifications View data binding commands ViewModel Model UI UI state and logic Business logic and data Выполняются View при пользовательском взаимодейтсвии (клики, ввод с клавиатуры и т.п.) ICommand, DelegateCommand, custom commands, etc.
  • 12. Command pattern Объект, представляющий собой дейтсвие Инкапсулирует само действие и его параметры
  • 14. Command pattern in WPF interface ICommand { bool CanExecute(object); void Execute(object); event EventHandler CanExecuteChanged; }
  • 15. Внедряем MVVM Слабая связность между View и ViewModel Слабая связность между ViewModel и Model View рассматривайте как шаблон для представления данных View минималистична, нет code behind ViewModel создаётся первой и устанавливается View как DataContext Используется Dependency injection / IoC
  • 17. View-first xamly. View ссылается на ViewModel (DataBinding) perfect for modern WPF
  • 18. ViewModel-first (MVP- like) class ViewModel { public ViewModel(IView view) { } }
  • 19. Marriage interface IView { void ApplyViewModel(object viewModel); } IView view = container.Resolve<IGameView>(); IViewModel container.Resolve<IGameViewModel>(); view.ApplyViewModel(vm);