В чем разница между шаблоном проектирования MVC, MVP и MVVM с точки зрения кодирования С#

Если мы ищем в Google фразу "В чем разница между шаблоном проектирования MVC, MVP и MVVM", мы можем получить несколько URL-адресов, которые теоретически обсуждают разницу между шаблоном проектирования MVC MVP и MVVM:

MVP

Используйте в ситуациях, когда связывание через текстовый код данных невозможно. Windows Forms является прекрасным примером этого. Чтобы отделить представление от модели, нужен докладчик. Поскольку представление не может напрямую привязываться к докладчику, информация должна передаваться в представление через интерфейс (IView).

MVVM

Используйте в ситуациях, когда возможно связывание через текстовый текст. Зачем? Различные интерфейсы IView для каждого представления удалены, что означает меньше кода для обслуживания. Некоторые примеры, где возможен MVVM, включают проекты WPF и javascript, использующие Knockout.

MVC

Используйте в ситуациях, когда связь между представлением и остальной частью программы не всегда доступна (и вы не можете эффективно использовать MVVM или MVP). Это ясно описывает ситуацию, когда веб-API отделяется от данных, отправляемых клиентским браузерам. Microsoft ASP.NET MVC является отличным инструментом для управления такими ситуациями и предоставляет очень четкую структуру MVC


Но я не нашел ни одной статьи, которая теоретически обсуждала бы разницу, а также пример кода.

Было бы очень хорошо, если бы я получил статью, в которой обсуждается разница между этими тремя шаблонами проектирования (MVC, MVP и MVVM) вместе с кодом.

Я хотел бы получить исходный код 3 похожих приложений CRUD, который был реализован этими тремя шаблонами проектирования (MVC, MVP и MVVM). Так что я могу пройтись по коду и понять, как нужно писать код для этих трех схем проектирования (MVC, MVP & MVVM).

Таким образом, если существует такая статья, в которой обсуждается, как код будет выглядеть по-разному для этих трех шаблонов проектирования (MVC, MVP и MVVM), пожалуйста, перенаправьте меня к этой статье.

Ответ 2

Некоторые основные отличия могут быть написаны короткими:

MVC:

Традиционный MVC находится там, где есть

  • Модель: действует как модель данных
  • Вид: предложения с представлением пользователю, который может быть пользовательским интерфейсом
  • Контроллер: управляет взаимодействием между Model и View, когда view вызывает контроллер для обновления модели. При необходимости просмотр может вызывать несколько контроллеров.

MVP:

Аналогично традиционному MVC, но Controller заменяется на Presenter. Но Ведущий, в отличие от Контролера, также отвечает за изменение представления. Обычно просмотр не вызывает презентацию.

MVVM

Разница здесь в наличии View Model. Это своего рода реализация шаблона проектирования Observer, где изменения в модели также представлены в представлении VM. Например: если сменщик изменен, обновляется не только модель, но также обновляются данные, которые могут быть текстом, отображаемым в представлении. Таким образом, существует двусторонняя привязка данных.

Ответ 3

Большое пояснение по ссылке: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

Пусть сначала посмотрим на MVC

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

Между контроллером и представлением существует взаимосвязь "один-к-одному". Это объясняется тем, что один контроллер может выбирать различные виды, которые будут визуализироваться на основе выполняемой операции.

Существует одна стрелка пути от контроллера к виду. Это связано с тем, что представление не имеет никакого знания или ссылки на контроллер.

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

MVP - презентация представления модели

Теперь рассмотрим шаблон MVP. Он очень похож на MVC, за исключением некоторых ключевых различий:

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

Между представлением и ассоциированным презентатором существует взаимно однозначное сопоставление.

В представлении содержится ссылка на презентатор. Ведущий также реагирует на события, которые запускаются из представления, поэтому он знает, что связано с ним.

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

MVVM - Модель просмотра модели Model

Итак, с шаблонами MVC и MVP перед нами, посмотрим на шаблон MVVM и посмотрим, какие различия он имеет.

Ввод начинается с представления, а не с модели просмотра.

Пока в представлении содержится ссылка на модель просмотра, модель просмотра не имеет информации о представлении. Вот почему его можно иметь сопоставление "один ко многим" между различными видами и одной моделью просмотра... даже по технологиям. Например, WPF View и Silverlight View могут использовать одну и ту же модель просмотра.

Ответ 4

MVC, MVP, MVVM

MVC (старый)

MVP (более модульный из-за своей слабой связи. Presenter является посредником между View и Model)

MVVM (у вас уже есть двусторонняя привязка между виртуальной машиной и компонентом пользовательского интерфейса, поэтому она более автоматизирована, чем MVP) enter image description here

Другое изображение: enter image description here

Ответ 5

Изображение ниже взято из статьи, написанной Эрвином ван дер Валком:

image explaining MVC, MVP and MVVM - by Erwin Vandervalk

Статья объясняет различия и дает несколько примеров кода на С#