В чем разница между шаблоном проектирования 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, где есть
- модель: действует как модель для данных
- View: имеет дело с видом на пользователя, который может быть UI
- 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 могут использовать одну и ту же модель представления.