Mvc, mvp and mvvm: A comparison of architectural patterns

Ivan Dyachenko
Ivan DyachenkoPrincipal, Software Consultant em AT&PI
MVC, MVP and MVVM: A Comparison of Architectural
Patterns
Dyachenko Ivan, Ignite
Что такое Model/View/(C or VM or P)
● Шаблоны, которые описывают модульный подход к
разработке приложений
● Модули включают:
○ Model - данные
○ View - слой представления (Presentation Layer)
○ C or VM or P - чистая логика
● Они основаны на принципе "разделения
обязанностей"
Why Model-View-(C or VM or P)
Основные преимущества MVC шаблонов в
том, что они увеличивают:
● Модульность
● Гибкость
● Тестируемость
● Поддерживаемость
Mvc, mvp and mvvm: A comparison of architectural patterns
Model-View-Controller (MVC)
Концепция MVC была описана в 1979 году Трюгве Реенскауг (англ. Trygve
Reenskaug) тогда работающим над языком программирования Smalltalk в
Xerox PARC.
Smalltalk MVC
Оригинальная концепция
В оригинальной концепции была описана сама идея и роль каждого из
элементов: модели, представления и контроллера.
Но связи между ними были описаны без конкретизации.
Назначение
Разделение бизнес-логики (модели) от её визуализации (представления,
вида)
● К одной модели можно присоединить несколько видов, при этом не
затрагивая реализацию модели.
● Не затрагивая реализацию видов, можно изменить реакции на
действия пользователя (нажатие мышью на кнопке, ввод данных), для
этого достаточно использовать другойконтроллер.
● Ряд разработчиков специализируется только в одной из областей
Концепция
● Модель (англ. Model). Модель предоставляет знания: данные и
методы работы с этими данными, реагирует на запросы, изменяя своё
состояние. Не содержит информации, как эти знания можно
визуализировать.
● Представление, вид (англ. View). Отвечает за отображение
информации (визуализацию). Часто в качестве представления
выступает форма (окно) с графическими элементами.
● Контроллер (англ. Controller). Обеспечивает связь между
пользователем и системой: контролирует ввод данных пользователем
и использует модель и представление для реализации необходимой
реакции.
Две основные модификации
Пассивная модель — модель не имеет никаких способов воздействовать
на представление или контроллер, и используется ими в качестве
источника данных для отображения
Активная модель — модель оповещает представление о том, что в ней
произошли изменения, а представления, которые заинтересованы в
оповещении, подписываются на эти сообщения. Это позволяет сохранить
независимость модели как от контроллера, так и от представления.
Mvc, mvp and mvvm: A comparison of architectural patterns
Пассивная модель
Активная модель
Классическая реализация
Классической реализацией концепции MVC принято
считать версию именно с активной моделью
Mvc, mvp and mvvm: A comparison of architectural patterns
Client/Server (DNA) vs MVC
Client/Server (DNA) vs MVC
MVC Observer Pattern
Model-View-Presenter
Шаблон Model-View-Presenter возник в начале 1990-х в Taligent
Шаблон проектирования, производный от MVC, который используется в
основном для построенияпользовательского интерфейса.
В MVP Presenter берет на себя функциональность посредника (играя
роль, аналогичную контроллеру в MVC). Кроме того, Presenter отвечает за
управление событиями пользовательского интерфейса (например,
mouseDown, keyDown и т.д.), которое обычно было заботой контроллера.
Model-View-Presenter
MVP является производным MVC
• Два типа реализации
• Passive View
• Supervising Controller
• Presenter предполагает функциональность MVC Controller
• View отвечает за обработку событий пользовательского интерфейса
• Model становится строго модели предметной области
• Больше ориентированный на пользовательский интерфейс
Model-View-Presenter
Model-View-Presenter
Пассивный вид (Passive View)
В этом случае вид ничего не знает о модели, а только имеет простые
свойства, для отображения данных. Представитель считывает
информацию из модели и обновляет свойства вида.
Требует больше усилий (кода), но связность становится еще меньше.
Наблюдающий контроллер (Supervising
Controller)
Здесь вид знает про модель и является ответственным за привязку
данных (датабиндинг) модели к виду.
Контроллер же содержит в себе всю логику работы. Это немного
упрощает жизнь, но увеличивает связность.
MVP Passive View/Supervising
Controller
MVC vs. MVP
Presentation Model (PM)
Модель представления – это логическое представлении UI без
привязки к элементам графического интерфейса.
1) Содержит логику UI:
Например, при нажатии на кнопку, модель представления уведомляется об
этом и производит соответствующие действия.
2) Отображает данные модели:
Производит необходимую конвертацию и форматирование данных модели
для правильного отображения пользователю.
3) Хранит состояние UI:
Хранения текущего выбранного элемента списка, ошибок валидации и
прочее.
Представление (вид) (View) имеет доступ к данным, хранящимся в модели
представления для дальнейших манипуляций (отображение).
Преимуществом такого подхода также является то, что вы можете создавать
тесты для вашего UI без привязки к элементам граф. интерфейса.
Model-View-ViewModel (MVVM)
Значительной степени основан на MVC
• Специализация шаблона MVP известна как Presentation Model
• Встроенный специально для WPF и Silverlight сред
• Model и View такие же как MVC
• ViewModel is a “Model of the View”
• It extends the Model with Behaviors the View could use
• Data Binding between View and Model
• Passes commands between the View and Model
Model-View-ViewModel (MVVM)
ViewModel не общается напрямую с View. Вместо ViewModel
предоставляет свойства, которые могут легко быть привязаны
(прибиндены). View, в свою очередь, использует эти свойства и команды
(Commands) для отображения данных и извлечения их из ViewModel.
Также необязательно, чтоб View знал о ViewModel.
XAML (язык разметки) позволяет декларативно, путем отражения
(Reflection) привязать свойства ViewModel к соответствующим элементам
View. Благодаря тому, что ViewModel предоставляет доступ через
свойства к данным, уже готовым к употреблению (отформатированным и
тд), то View – очень простое и не содержит никакой логики.
Model-View-ViewModel (MVVM)
Model-View-ViewModel (MVVM)
Mvc, mvp and mvvm: A comparison of architectural patterns
Иерархия MVC шаблонов
1 de 34

Recomendados

Паттерны проектирования por
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
130 visualizações26 slides
MVC por
MVCMVC
MVCБахрам Ходжаев
269 visualizações4 slides
Joomla (Админка) www.hotwebstudio.ru por
Joomla (Админка) www.hotwebstudio.ruJoomla (Админка) www.hotwebstudio.ru
Joomla (Админка) www.hotwebstudio.ruhotwebstudio.ru
520 visualizações6 slides
ASP.NET MVC: new era? por
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?Alexander Konduforov
1.6K visualizações20 slides
Антон Валюх - Использование паттерна Mvvm в android por
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
2.4K visualizações37 slides
Стандарты и соглашения в сложных ООП-приложениях por
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхMagecom Ukraine
539 visualizações32 slides

Mais conteúdo relacionado

Mais procurados

Архитектура для автоматизированного тестирования UI por
Архитектура для автоматизированного тестирования UIАрхитектура для автоматизированного тестирования UI
Архитектура для автоматизированного тестирования UIAnton Bevzuk
729 visualizações34 slides
C++ осень 2012 лекция 8 por
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8Technopark
627 visualizações72 slides
Принципы SOLID por
Принципы SOLIDПринципы SOLID
Принципы SOLIDUnguryan Vitaliy
3.7K visualizações41 slides
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS por
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSГлеб Тарасов
924 visualizações47 slides
5 Тема por
5 Тема5 Тема
5 ТемаAlexandrLArhipov
535 visualizações64 slides
МАПО Лекция 22 Проект por
МАПО Лекция 22 ПроектМАПО Лекция 22 Проект
МАПО Лекция 22 ПроектОлег Гудаев
1.8K visualizações21 slides

Mais procurados(14)

Архитектура для автоматизированного тестирования UI por Anton Bevzuk
Архитектура для автоматизированного тестирования UIАрхитектура для автоматизированного тестирования UI
Архитектура для автоматизированного тестирования UI
Anton Bevzuk729 visualizações
C++ осень 2012 лекция 8 por Technopark
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8
Technopark627 visualizações
Принципы SOLID por Unguryan Vitaliy
Принципы SOLIDПринципы SOLID
Принципы SOLID
Unguryan Vitaliy3.7K visualizações
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS por Глеб Тарасов
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Глеб Тарасов924 visualizações
5 Тема por AlexandrLArhipov
5 Тема5 Тема
5 Тема
AlexandrLArhipov535 visualizações
МАПО Лекция 22 Проект por Олег Гудаев
МАПО Лекция 22 ПроектМАПО Лекция 22 Проект
МАПО Лекция 22 Проект
Олег Гудаев1.8K visualizações
ПартФорум DIRECTUM 2013 - разработка прикладных решений por Виктор Золотов
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
Виктор Золотов503 visualizações
C# Web. Занятие 16. por Igor Shkulipa
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
Igor Shkulipa376 visualizações
МАПО Лекция 23 Дизайн программ por Олег Гудаев
МАПО Лекция 23 Дизайн программМАПО Лекция 23 Дизайн программ
МАПО Лекция 23 Дизайн программ
Олег Гудаев1.9K visualizações
Разработка пользовательских элементов управления в WPF por CUSTIS
Разработка пользовательских элементов управления в WPFРазработка пользовательских элементов управления в WPF
Разработка пользовательских элементов управления в WPF
CUSTIS10.7K visualizações
Visual Paradigm por anddriga
Visual ParadigmVisual Paradigm
Visual Paradigm
anddriga1.3K visualizações
Практический анализ и визуальное моделирование на UML por Nikolai Kireev
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
Nikolai Kireev17.6K visualizações

Destaque

Как писать красивый код или основы SOLID por
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
5.3K visualizações23 slides
Принципы проектирования S.O.L.I.D por
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
16.9K visualizações29 slides
Viper - чистая архитектура iOS-приложения (И. Чирков) por
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)65apps
4.7K visualizações48 slides
Как мы переходили на sails.js por
Как мы переходили на sails.jsКак мы переходили на sails.js
Как мы переходили на sails.jsIgor Antonov
880 visualizações19 slides
Технология MVC в высоконагруженных проектах por
Технология MVC в высоконагруженных проектахТехнология MVC в высоконагруженных проектах
Технология MVC в высоконагруженных проектахMedia Gorod
754 visualizações11 slides
Mystery Shopping For Competitive Analysis Slidecast (In Russian) por
Mystery Shopping For Competitive Analysis Slidecast (In Russian)Mystery Shopping For Competitive Analysis Slidecast (In Russian)
Mystery Shopping For Competitive Analysis Slidecast (In Russian)Evgeniy Simakhin
805 visualizações12 slides

Destaque(11)

Как писать красивый код или основы SOLID por Pavel Tsukanov
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
Pavel Tsukanov5.3K visualizações
Принципы проектирования S.O.L.I.D por AndreyGeonya
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
AndreyGeonya16.9K visualizações
Viper - чистая архитектура iOS-приложения (И. Чирков) por 65apps
Viper - чистая архитектура iOS-приложения (И. Чирков)Viper - чистая архитектура iOS-приложения (И. Чирков)
Viper - чистая архитектура iOS-приложения (И. Чирков)
65apps4.7K visualizações
Как мы переходили на sails.js por Igor Antonov
Как мы переходили на sails.jsКак мы переходили на sails.js
Как мы переходили на sails.js
Igor Antonov880 visualizações
Технология MVC в высоконагруженных проектах por Media Gorod
Технология MVC в высоконагруженных проектахТехнология MVC в высоконагруженных проектах
Технология MVC в высоконагруженных проектах
Media Gorod754 visualizações
Mystery Shopping For Competitive Analysis Slidecast (In Russian) por Evgeniy Simakhin
Mystery Shopping For Competitive Analysis Slidecast (In Russian)Mystery Shopping For Competitive Analysis Slidecast (In Russian)
Mystery Shopping For Competitive Analysis Slidecast (In Russian)
Evgeniy Simakhin805 visualizações
MVC ppt presentation por Bhavin Shah
MVC ppt presentationMVC ppt presentation
MVC ppt presentation
Bhavin Shah14K visualizações
Тимур Лукин - Архитектура и проектирование ПО por Yandex
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПО
Yandex1.1K visualizações
Sep reqm-lec1 por Natalia Zhelnova
Sep reqm-lec1Sep reqm-lec1
Sep reqm-lec1
Natalia Zhelnova1.5K visualizações
Считаем NPS por clientomannia
Считаем NPSСчитаем NPS
Считаем NPS
clientomannia38.6K visualizações
Servqual model por rockpulkit
Servqual modelServqual model
Servqual model
rockpulkit214.5K visualizações

Similar a Mvc, mvp and mvvm: A comparison of architectural patterns

Архитектурный шаблон MVC por
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVCUnguryan Vitaliy
4K visualizações7 slides
Backbone lesson 1 por
Backbone lesson 1Backbone lesson 1
Backbone lesson 1Mihail Skida
1.4K visualizações13 slides
Шаблоны проектирования в Magento por
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
2.3K visualizações25 slides
django.pdf por
django.pdfdjango.pdf
django.pdfAntonPolovnikov1
5 visualizações8 slides
Django por
DjangoDjango
DjangoPolinaPolovnikova
20 visualizações8 slides
C# Web. Занятие 09. por
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
1.6K visualizações60 slides

Similar a Mvc, mvp and mvvm: A comparison of architectural patterns(20)

Архитектурный шаблон MVC por Unguryan Vitaliy
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
Unguryan Vitaliy4K visualizações
Backbone lesson 1 por Mihail Skida
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
Mihail Skida1.4K visualizações
Шаблоны проектирования в Magento por Pavel Usachev
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
Pavel Usachev2.3K visualizações
C# Web. Занятие 09. por Igor Shkulipa
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa1.6K visualizações
Как пройти собеседование и получить первую работу на Swift por Anton Loginov
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
Anton Loginov2.1K visualizações
Moxy. Из чего состоит и как этим пользоваться por Yuri Shmakov
Moxy. Из чего состоит и как этим пользоватьсяMoxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоваться
Yuri Shmakov5.2K visualizações
ASP.NET, MVC, ASP.NET MVC por GetDev.NET
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET2.6K visualizações
Web application framework por Viktor Chukhantsev
Web application frameworkWeb application framework
Web application framework
Viktor Chukhantsev311 visualizações
чмв лекция №5 por student_kai
чмв   лекция №5чмв   лекция №5
чмв лекция №5
student_kai747 visualizações
Как выбрать для проекта практики проектирования и работы с требованиями por SQALab
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
SQALab848 visualizações
Choose method for requirements Tsepkov Analyst Days-2017 por Maxim Tsepkov
Choose method for requirements Tsepkov Analyst Days-2017Choose method for requirements Tsepkov Analyst Days-2017
Choose method for requirements Tsepkov Analyst Days-2017
Maxim Tsepkov215 visualizações
Как выбрать для проекта практики проектирования и работы с требованиями por CUSTIS
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
CUSTIS725 visualizações
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers por Глеб Тарасов
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов1.5K visualizações
iOS-02-Паттерны ООП por Noveo
iOS-02-Паттерны ООПiOS-02-Паттерны ООП
iOS-02-Паттерны ООП
Noveo618 visualizações
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS por Омские ИТ-субботники
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
ASP.NET MVC por GetDev.NET
ASP.NET MVCASP.NET MVC
ASP.NET MVC
GetDev.NET784 visualizações
Viper por Alexey Shtanko
ViperViper
Viper
Alexey Shtanko174 visualizações
The MVC Renaissance | Возрождение MVC por Bulat Khabirov
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVC
Bulat Khabirov552 visualizações

Mvc, mvp and mvvm: A comparison of architectural patterns

  • 1. MVC, MVP and MVVM: A Comparison of Architectural Patterns Dyachenko Ivan, Ignite
  • 2. Что такое Model/View/(C or VM or P) ● Шаблоны, которые описывают модульный подход к разработке приложений ● Модули включают: ○ Model - данные ○ View - слой представления (Presentation Layer) ○ C or VM or P - чистая логика ● Они основаны на принципе "разделения обязанностей"
  • 3. Why Model-View-(C or VM or P) Основные преимущества MVC шаблонов в том, что они увеличивают: ● Модульность ● Гибкость ● Тестируемость ● Поддерживаемость
  • 5. Model-View-Controller (MVC) Концепция MVC была описана в 1979 году Трюгве Реенскауг (англ. Trygve Reenskaug) тогда работающим над языком программирования Smalltalk в Xerox PARC.
  • 7. Оригинальная концепция В оригинальной концепции была описана сама идея и роль каждого из элементов: модели, представления и контроллера. Но связи между ними были описаны без конкретизации.
  • 8. Назначение Разделение бизнес-логики (модели) от её визуализации (представления, вида) ● К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. ● Не затрагивая реализацию видов, можно изменить реакции на действия пользователя (нажатие мышью на кнопке, ввод данных), для этого достаточно использовать другойконтроллер. ● Ряд разработчиков специализируется только в одной из областей
  • 9. Концепция ● Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать. ● Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами. ● Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.
  • 10. Две основные модификации Пассивная модель — модель не имеет никаких способов воздействовать на представление или контроллер, и используется ими в качестве источника данных для отображения Активная модель — модель оповещает представление о том, что в ней произошли изменения, а представления, которые заинтересованы в оповещении, подписываются на эти сообщения. Это позволяет сохранить независимость модели как от контроллера, так и от представления.
  • 14. Классическая реализация Классической реализацией концепции MVC принято считать версию именно с активной моделью
  • 19. Model-View-Presenter Шаблон Model-View-Presenter возник в начале 1990-х в Taligent Шаблон проектирования, производный от MVC, который используется в основном для построенияпользовательского интерфейса. В MVP Presenter берет на себя функциональность посредника (играя роль, аналогичную контроллеру в MVC). Кроме того, Presenter отвечает за управление событиями пользовательского интерфейса (например, mouseDown, keyDown и т.д.), которое обычно было заботой контроллера.
  • 20. Model-View-Presenter MVP является производным MVC • Два типа реализации • Passive View • Supervising Controller • Presenter предполагает функциональность MVC Controller • View отвечает за обработку событий пользовательского интерфейса • Model становится строго модели предметной области • Больше ориентированный на пользовательский интерфейс
  • 23. Пассивный вид (Passive View) В этом случае вид ничего не знает о модели, а только имеет простые свойства, для отображения данных. Представитель считывает информацию из модели и обновляет свойства вида. Требует больше усилий (кода), но связность становится еще меньше.
  • 24. Наблюдающий контроллер (Supervising Controller) Здесь вид знает про модель и является ответственным за привязку данных (датабиндинг) модели к виду. Контроллер же содержит в себе всю логику работы. Это немного упрощает жизнь, но увеличивает связность.
  • 27. Presentation Model (PM) Модель представления – это логическое представлении UI без привязки к элементам графического интерфейса.
  • 28. 1) Содержит логику UI: Например, при нажатии на кнопку, модель представления уведомляется об этом и производит соответствующие действия. 2) Отображает данные модели: Производит необходимую конвертацию и форматирование данных модели для правильного отображения пользователю. 3) Хранит состояние UI: Хранения текущего выбранного элемента списка, ошибок валидации и прочее. Представление (вид) (View) имеет доступ к данным, хранящимся в модели представления для дальнейших манипуляций (отображение). Преимуществом такого подхода также является то, что вы можете создавать тесты для вашего UI без привязки к элементам граф. интерфейса.
  • 29. Model-View-ViewModel (MVVM) Значительной степени основан на MVC • Специализация шаблона MVP известна как Presentation Model • Встроенный специально для WPF и Silverlight сред • Model и View такие же как MVC • ViewModel is a “Model of the View” • It extends the Model with Behaviors the View could use • Data Binding between View and Model • Passes commands between the View and Model
  • 30. Model-View-ViewModel (MVVM) ViewModel не общается напрямую с View. Вместо ViewModel предоставляет свойства, которые могут легко быть привязаны (прибиндены). View, в свою очередь, использует эти свойства и команды (Commands) для отображения данных и извлечения их из ViewModel. Также необязательно, чтоб View знал о ViewModel. XAML (язык разметки) позволяет декларативно, путем отражения (Reflection) привязать свойства ViewModel к соответствующим элементам View. Благодаря тому, что ViewModel предоставляет доступ через свойства к данным, уже готовым к употреблению (отформатированным и тд), то View – очень простое и не содержит никакой логики.