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

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

MVP

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

MVVM

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

MVC

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


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

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

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

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

4 ответов


этой должно быть хорошим стартером. На самом деле, выбранная вами "платформа" также играет большую роль в том, как вы используете эти шаблоны. Например, MVVM естественно подходит для WPF, в то время как MVP хорошо работает с Windows Forms. ASP.Net MVC говорит сам за себя.


некоторые основные отличия можно записать вкратце:

MVC:

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

  1. модель: действует как модель для данных
  2. View: имеет дело с видом на пользователя, который может быть UI
  3. Controller: управляет взаимодействием между моделью и представлением, где view вызывает контроллер для обновления модели. При необходимости View может вызывать несколько контроллеров.

MVP:

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

MVVM

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


отличное объяснение по ссылке:http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

давайте сначала посмотрим на MVC

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

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

есть один способ стрелка от контроллера для просмотра. Это связано с тем, что представление не имеет никаких знаний или ссылок на контроллер.

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

MVP-Model View Presenter

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

ввод начинается с представления, а не с ведущего.

существует сопоставление один к одному между представлением и связанным ведущим.

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

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

MVVM-Model View View Model

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

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

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


MVC, MVP, MVVM

MVC (старый)

MVP (более модульный из-за своего низко-соединения. Ведущий является посредником между представлением и моделью)

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

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