Если мы ищем в 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
Но я не нашел ни одной статьи, которая теоретически обсуждала бы разницу, а также пример кода.
Было бы очень хорошо, если бы я получил статью, в которой обсуждается разница между этими 3 шаблонами проектирования (MVC, MVP и MVVM) вместе с кодом.
Я хотел бы получить исходный код 3 похожих приложений CRUD, который был реализован этими тремя шаблонами проектирования (MVC, MVP и MVVM). Так что я могу пройтись по коду и понять, как нужно писать код для этих трех шаблонов проектирования (MVC, MVP & MVVM).
Поэтому, если существует такая статья, в которой обсуждается, как код будет выглядеть по-разному для этих трех шаблонов проектирования (MVC, MVP и MVVM), пожалуйста, перенаправьте меня к этой статье.
Ответы:
Некоторые основные отличия можно записать вкратце:
MVC:
Традиционный MVC - это место, где есть
MVP:
Похож на традиционный MVC, но контроллер заменен на Presenter. Но Presenter, в отличие от Controller, отвечает и за изменение представления. Представление обычно не вызывает ведущего.
MVVM
Разница здесь заключается в наличии View Model. Это своего рода реализация шаблона проектирования Observer, где изменения в модели также представлены в представлении виртуальной машиной. Например: если изменен ползунок, обновляется не только модель, но и данные, которые могут быть текстовыми, которые отображаются в представлении. Таким образом, существует двусторонняя привязка данных.
источник
MVC, MVP, MVVM
MVC (старый)
MVP (более модульный из-за слабой связи. Presenter является посредником между View и Model)
MVVM (у вас уже есть двусторонняя привязка между виртуальной машиной и компонентом пользовательского интерфейса, поэтому она более автоматизирована, чем MVP)
Другое изображение:
источник
Отличное объяснение по ссылке: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
Давайте сначала посмотрим на MVC
Сначала вход направлен на контроллер, а не на вид. Этот ввод может исходить от пользователя, взаимодействующего со страницей, но это также может быть просто ввод определенного URL в браузер. В любом случае, это Контроллер, который связан с некоторыми функциональными возможностями.
Между контроллером и представлением существует отношение многие-к-одному. Это связано с тем, что один контроллер может выбирать различные представления для визуализации в зависимости от выполняемой операции.
Есть стрелка в одну сторону от контроллера к представлению. Это связано с тем, что представление не имеет каких-либо знаний или ссылок на контроллер.
Контроллер действительно передает Модель обратно, так что есть знания между Представлением и ожидаемой Моделью, передаваемой в него, но не Контроллер, подающий его.
MVP - ведущий модельного представления
Теперь давайте посмотрим на шаблон MVP. Это выглядит очень похоже на MVC, за исключением некоторых ключевых отличий:
Ввод начинается с просмотра, а не докладчика.
Существует взаимно-однозначное сопоставление между представлением и связанным докладчиком.
Представление содержит ссылку на докладчика. Ведущий также реагирует на события, запускаемые из представления, поэтому он знает о представлении, с которым он связан.
Presenter обновляет представление на основе запрошенных действий, которые он выполняет над моделью, но представление не распознает модель.
MVVM - Model View View Model
Итак, с шаблонами MVC и MVP перед нами, давайте посмотрим на шаблон MVVM и посмотрим, какие различия он содержит:
Ввод начинается с представления, а не с модели представления.
В то время как представление содержит ссылку на модель представления, модель представления не имеет информации о представлении. Вот почему возможно иметь отображение один-ко-многим между различными представлениями и одной моделью представления ... даже между технологиями. Например, представление WPF и представление Silverlight могут использовать одну и ту же модель представления.
источник
Изображение ниже взято из статьи, написанной Эрвином ван дер Валком:
Статья объясняет различия и дает некоторые примеры кода в C #
источник