Яка різниця між схемою дизайну MVC, MVP та MVVM з точки зору кодування c #


202

Якщо ми шукаємо Google, використовуючи фразу "Яка різниця між MVC, MVP та MVVM шаблоном дизайну", то ми можемо отримати кілька URL-адрес, які обговорюють різницю між MVC MVP та MVVM-схемою теоретично, як :

MVP

Використовувати в ситуаціях, коли прив'язка через контекст даних неможлива. Windows Forms - прекрасний приклад цього. Для того, щоб відокремити вигляд від моделі, потрібен ведучий. Оскільки представлення не може безпосередньо прив'язуватися до ведучого, інформація повинна бути передана до представлення через інтерфейс (IView).

МВВМ

Використовуйте в ситуаціях, коли можлива прив'язка через контекст даних. Чому? Видаляються різні інтерфейси IView для кожного перегляду, що означає менше коду для підтримки. Деякі приклади, коли можливий MVVM, включають проекти WPF та javascript за допомогою нокауту.

MVC

Використовуйте в ситуаціях, коли зв’язок між переглядом та рештою програми не завжди доступний (і ви не можете ефективно використовувати MVVM або MVP). Це чітко описує ситуацію, коли веб-API відокремлений від даних, що надсилаються клієнтам-браузерам. Майкрософт ASP.NET MVC від Microsoft є чудовим інструментом для управління такими ситуаціями та забезпечує дуже чіткі рамки MVC


Але я не знайшов жодної статті, яка б теоретично обговорювала різницю разом із зразком коду.

Було б дуже приємно, якщо я отримаю статтю, в якій обговорюється різниця між цими 3 моделями дизайну (MVC, MVP і MVVM) разом з кодом.

Я хотів би взяти до рук вихідний код трьох подібних додатків CRUD, який був реалізований цими трьома моделями дизайну (MVC, MVP & MVVM). Щоб я міг пройти код і зрозуміти, як слід написати код для цих трьох дизайнерських скоромов (MVC, MVP & MVVM).

Отже, якщо існує якась така стаття, в якій обговорюється, як код буде виглядати по-різному для цих 3 моделей дизайну (MVC, MVP & MVVM), то, будь ласка, перенаправляйте мене до цієї статті.


14
У TechEd 2011 відбулася хороша, але проста презентація про ці 3 закономірності. Доповідач зробив та показав приклади однієї і тієї ж бізнес-моделі за допомогою C # та Visual Studio. Ось відео на каналі9 MVC, MVP та MVVM: Порівняння архітектурних шаблонів
Марко Медрано

2
Ось стаття: realm.io/news/eric-maxwell-mvc-mvp-and-mvvm-on-android . Дуже добре написаний і зрозумілий ІМО. У ньому також є репо Github з гілкою для кожного візерунка.
cuddlecheek

Це було цікаво: cirw.in/blog/time-to-move-on
Андрій

Відповіді:


100

Деякі основні відмінності можна записати коротко:

MVC:

Традиційний MVC є там, де є

  1. Модель: виступає в якості моделі для даних
  2. Перегляд: Займається поглядом на користувача, яким може бути користувальницький інтерфейс
  3. Контролер: Керує взаємодією Модель та Перегляд, де view викликає контролер для оновлення моделі. Перегляд може зателефонувати за допомогою декількох контролерів.

MVP:

Подібно до традиційного MVC, але контролер замінений Presenter. Але ведучий, на відміну від Controller, також відповідає за зміну погляду. Перегляд ведучого зазвичай не дзвонить.

МВВМ

Різниця тут полягає у наявності View Model. Це свого роду реалізація Шаблону дизайну спостерігачів, де зміни в моделі представлені також у вигляді представлення VM. Напр.: Якщо повзунок змінено, оновлюється не тільки модель, але й дані, які можуть бути текстовими, які відображаються у поданні, також оновлюються. Отже, відбувається двостороння прив'язка даних.


1
Невелика деталізація - ви можете вибрати, чи це двостороння прив'язка даних, або ви також можете визначити одну сторону прив'язки.
Jviaches

10
"Перегляд зазвичай не викликає ведучого"? ви можете пояснити більше про це речення? якщо перегляд інтерфейсу не збирається зателефонувати до ведучого, який збирається?
Амір Зіараті

3
@AmirZiarati Ведучий слідкує за подіями. У разі подій ведучий вступає в гру і вживає необхідних дій.
Прітам Банерджі

так, доки він має посилання на перегляд. я помилився, я подумав, що ви мали на увазі, що перегляд навіть не потребує виклику ведучого спочатку, хоча це повинно хоч один раз дякую;)
Амір Зіараті

1
@PritamBanerjee, Із пояснення обидва MVP та MVVM майже однакові. P або VM оновлять M&V
Manohar Reddy Poreddy

42

MVC, MVP, MVVM

MVC (старий)

MVP (більш модульний через його низьке з'єднання. Presenter є посередником між View і Model)

MVVM (Ви вже маєте двостороннє зв’язування між компонентами VM та інтерфейсом користувача, тому воно більш автоматизоване, ніж MVP) введіть тут опис зображення

Інше зображення: введіть тут опис зображення


24
Будь ласка, не просто копіюйте зображення, особливо якщо вони не згодні між собою. Перегляньте веб-переглядач MVC (старий, який ви не бачите), щоб переглянути його у верхньому зображенні, але розмовляє з контролером на нижньому зображенні.
peter.fr

1
@UddhavGautam Його трохи заплутано, оскільки на першому зображенні показано вид як вхідний пункт, а на другому - контролер.
everlasto

1
У першій діаграмі в чому різниця між MVVM та MVP? Як я бачу, це лише зв’язки між V і VM / P. Які в одному випадку мають зворотні та попередні повідомлення як двонаправлене посилання, а в іншому вони представлені у вигляді двох однонаправлених ланок. Я не бачу жодної функціональної різниці між ними. Що я пропускаю?
iCyberPaul

1
Веб-переглядач означає користувача, звідки відбувається взаємодія між вами та додатком.
Уддхав Гаутам

4
Скрут сюжету: ніхто насправді не знає, що відбувається. Вони всі насправді просто одне й те саме. Ха-ха. Ні, але насправді, навіть із цими «корисними» зображеннями важко обробити, що за чорт йде. Я думаю, що це частина проблеми / плутанини.
Андрій

34

Велике пояснення за посиланням: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

Давайте спочатку подивимось на MVC

Вхід спрямовується спочатку на контролер, а не на вигляд. Цей вхід може надходити від користувача, який взаємодіє зі сторінкою, але це може бути і просто введенням певного URL-адреса в браузер. У будь-якому випадку, це контролер, з яким пов'язаний, щоб розпочати деяку функціональність.

Між контролером і видом існує взаємозв'язок між собою. Це тому, що один контролер може вибрати різні подання для відображення на основі операції, що виконується.

Існує одна стрілка в напрямку від контролера до перегляду. Це пояснюється тим, що представлення даних не має жодних знань про контролер або посилання на нього.

Контролер передає Модель назад, тому є знання між Переглядом і очікуваною моделлю, що передається в неї, але не Контролером, який її обслуговує.

MVP - презентатор перегляду моделей

Тепер давайте розглянемо модель MVP. Він дуже схожий на MVC, за винятком деяких ключових відмінностей:

Введення починається з представлення даних, а не з презентатора.

Існує відображення «один на один» між Переглядом та пов’язаним з ним презентатором.

Перегляд містить посилання на ведучого. Ведучий також реагує на події, викликані з Перегляду, тому він знає про Перегляд, з яким пов'язаний.

Презентатор оновлює Перегляд на основі запитуваних дій, які він виконує на Моделі, але Перегляд не відомий моделі.

MVVM - Модель перегляду з виду моделі

Тож із моделями MVC та MVP перед нами давайте подивимось на шаблон MVVM і подивимося, які відмінності у ньому є:

Введення починається з виду, а не з Модель перегляду.

Хоча у представленні міститься посилання на модель перегляду, модель перегляду не має інформації про вид. Ось чому можливе суцільне відображення між різними видами перегляду та однією моделлю перегляду… навіть у різних технологіях. Наприклад, WPF View і Silverlight View можуть поділяти одну і ту ж модель перегляду.


7
"Це тому, що представлення даних не має жодних знань про контролер або посилання на нього" Це неправда
Адам Вольський

@AmirZiarati ViewModel не є частиною MVP, а MVVM.
Джо

Було б добре, якби ви
JKA

3

Зображення нижче - із статті, написаної Ервіном ван дер Валком:

зображення, що пояснює MVC, MVP та MVVM - автор Ервін Вандервальк

У статті пояснюються відмінності та наведено кілька прикладів коду в C #


Наведені вище зображення не бентежать, як у MVC чому VIEW безпосередньо звертається до моделі? те ж саме для інших?
smkrn110

На цих діаграмах незрозуміло, що означають стрілки. Чи означає стрілка доступ чи маніпуляції? На діаграмі MVC незрозуміло, чому немає стрілки, яка починається з Моделі
Pontios
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.