SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
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);

Mais conteúdo relacionado

Semelhante a MVVM in WPF

Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
Виктор Золотов
 
чмв лекция №5
чмв   лекция №5чмв   лекция №5
чмв лекция №5
student_kai
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
GetDev.NET
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Глеб Тарасов
 
Oracle ADF для Java EE разработчика
Oracle ADF для Java EE разработчикаOracle ADF для Java EE разработчика
Oracle ADF для Java EE разработчика
Dmitry Nefedkin
 

Semelhante a MVVM in WPF (20)

The MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVC
 
iOS-02-Паттерны ООП
iOS-02-Паттерны ООПiOS-02-Паттерны ООП
iOS-02-Паттерны ООП
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
 
AngularJS basics & theory
AngularJS basics & theoryAngularJS basics & theory
AngularJS basics & theory
 
чмв лекция №5
чмв   лекция №5чмв   лекция №5
чмв лекция №5
 
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
Moxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоватьсяMoxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоваться
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 
VIPER architecture
VIPER architectureVIPER architecture
VIPER architecture
 
Oracle ADF для Java EE разработчика
Oracle ADF для Java EE разработчикаOracle ADF для Java EE разработчика
Oracle ADF для Java EE разработчика
 
Архитектура для автоматизированного тестирования UI
Архитектура для автоматизированного тестирования UIАрхитектура для автоматизированного тестирования UI
Архитектура для автоматизированного тестирования UI
 
Модельно-ориентированная инженерия в MATLAB и Simulink
Модельно-ориентированная инженерия в MATLAB и SimulinkМодельно-ориентированная инженерия в MATLAB и Simulink
Модельно-ориентированная инженерия в MATLAB и Simulink
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Viper в ios проектах
Viper в ios проектахViper в ios проектах
Viper в ios проектах
 

Último

2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 

Último (9)

Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 

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);