Вопрос:

Что такое MVP и MVC и в чем разница?

design-patterns model-view-controller user-interface mvp glossary

457593 просмотра

23 ответа

24804 Репутация автора

Если смотреть за пределы RAD (перетаскивания и конфигурирования) способа создания пользовательских интерфейсов, который многие инструменты поощряют, вы, вероятно, натолкнетесь на три модели проектирования, которые называются Model-View-Controller , Model-View-Presenter и Model-View-ViewModel . Мой вопрос состоит из трех частей:

  1. Какие проблемы решают эти шаблоны?
  2. Чем они похожи?
  3. Насколько они разные?
Автор: Mike Minutillo Источник Размещён: 05.08.2008 10:06

Ответы (23)


18 плюса

25172 Репутация автора

Обе эти структуры стремятся разделить проблемы - например, взаимодействие с источником данных (модель), логику приложения (или превращение этих данных в полезную информацию) (Controller / Presenter) и код отображения (View). В некоторых случаях модель также может быть использована для превращения источника данных в абстракцию более высокого уровня. Хорошим примером этого является проект MVC Storefront .

Существует дискуссия здесь о различиях между MVC против MVP.

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

Проекты MVP предоставляют Presenter доступ к модели и взаимодействуют с представлением.

Сказав это, ASP.NET MVC по этим определениям является платформой MVP, потому что Контроллер обращается к Модели для заполнения Представления, которое, как предполагается, не имеет логики (просто отображает переменные, предоставленные Контроллером).

Чтобы, возможно, получить представление об отличии ASP.NET MVC от MVP, посмотрите эту презентацию MIX Скотта Хансельмана.

Автор: Matt Mitchell Размещён: 05.08.2008 10:20

409 плюса

82135 Репутация автора

Некоторое время назад я писал об этом, цитируя превосходный пост Тодда Снайдера о разнице между ними :

Вот ключевые различия между шаблонами:

MVP Pattern

  • Вид более слабо связан с моделью. Докладчик отвечает за привязку модели к представлению.
  • Легче для модульного тестирования, потому что взаимодействие с представлением осуществляется через интерфейс
  • Обычно вид на карту докладчика один к одному. Сложные представления могут иметь несколько докладчиков.

MVC Pattern

  • Контроллер основан на поведении и может быть разделен между представлениями
  • Может быть ответственным за определение того, какой вид отображать

Это лучшее объяснение в Интернете, которое я мог найти.

Автор: Jon Limjap Размещён: 05.08.2008 10:21

35 плюса

22479 Репутация автора

  • MVP = Model-View-Presenter
  • MVC = Модель-Вид-Контроллер

    1. Оба шаблона представления. Они разделяют зависимости между моделью (например, объектами домена), вашим экраном / веб-страницей (представлением) и поведением вашего пользовательского интерфейса (Presenter / Controller).
    2. Они довольно схожи по концепции, люди инициализируют Presenter / Controller по-разному в зависимости от вкуса.
    3. Отличная статья о различиях здесь . Наиболее примечательным является то, что шаблон MVC имеет модель, обновляющую представление.
Автор: Brett Veenstra Размещён: 05.08.2008 10:22

105 плюса

17419 Репутация автора

MVP: вид отвечает.

Представление, в большинстве случаев, создает его презентатор. Докладчик будет взаимодействовать с моделью и управлять видом через интерфейс. Представление иногда взаимодействует с докладчиком, как правило, через некоторый интерфейс. Это сводится к реализации; Вы хотите, чтобы представление вызывало методы на докладчике, или вы хотите, чтобы представление имело события, которые слушатель прослушивает? Это сводится к следующему: представление знает о ведущем. Вид делегатов на ведущего.

MVC: контроллер отвечает.

Контроллер создается или доступен на основании какого-либо события / запроса. Затем контроллер создает соответствующий вид и взаимодействует с моделью для дальнейшей настройки вида. Это сводится к следующему: контроллер создает и управляет представлением; вид подчинен контроллеру. Вид не знает о контроллере.

Автор: Brian Leahy Размещён: 06.08.2008 10:51

33 плюса

4808 Репутация автора

Также стоит помнить, что существуют разные типы MVP. Фаулер разбил схему на две части - пассивное представление и контролирующий контроллер.

При использовании пассивного представления в вашем представлении обычно реализуется детальный интерфейс со свойствами, более или менее сопоставленными непосредственно с лежащим в основе виджетом пользовательского интерфейса. Например, у вас может быть ICustomerView со свойствами, такими как Имя и Адрес.

Ваша реализация может выглядеть примерно так:

public class CustomerView : ICustomerView
{
    public string Name
    { 
        get { return txtName.Text; }
        set { txtName.Text = value; }
    }
}

Ваш класс Presenter будет говорить с моделью и «сопоставлять» ее с представлением. Этот подход называется «пассивным представлением». Преимущество состоит в том, что представление легко тестировать, и его легче перемещать между платформами пользовательского интерфейса (Web, Windows / XAML и т. Д.). Недостатком является то, что вы не можете использовать такие вещи, как привязка данных (что действительно полезно в таких средах, как WPF и Silverlight ).

Второй вид MVP - Контролирующий Контроллер. В этом случае у вашего View может быть свойство Customer, которое опять-таки связано с виджетами пользовательского интерфейса. Вам не нужно думать о синхронизации и микро-управлении представлением, и Supervising Controller может вмешаться и помочь в случае необходимости, например, с помощью сложной логики взаимодействия.

Третий «аромат» MVP (или кто-то, возможно, назовет это отдельным шаблоном) - это модель представления (или иногда ее называют Model-View-ViewModel). По сравнению с MVP вы «объединяете» M и P в один класс. У вас есть объект customer, к которому привязаны ваши виджеты UI, но у вас также есть дополнительные поля, специфичные для UI, такие как "IsButtonEnabled", "IsReadOnly" и т. Д.

Я думаю, что лучший ресурс, который я нашел в архитектуре пользовательского интерфейса, - это серия постов в блоге, сделанных Джереми Миллером на оглавлении «Построй свою собственную серию CAB» . Он рассмотрел все варианты MVP и показал код C # для их реализации.

Я также писал в блоге о модели Model-View-ViewModel в контексте Silverlight на сайте YouCard. Повторное посещение: Реализация шаблона ViewModel .

Автор: Jonas Follesø Размещён: 08.08.2008 05:55

166 плюса

21642 Репутация автора

MVP - это не обязательно сценарий, когда представление является ответственным (см., Например, MVP Taligent).
Я сожалею, что люди все еще проповедуют это как шаблон («Представление во главе») в противоположность анти-шаблону, поскольку он противоречит «Это просто представление» (Pragmatic Programmer). «Это просто представление» гласит, что окончательное представление, отображаемое для пользователя, является второстепенной задачей приложения. MVP модель от Microsoft делает повторное использование представлений гораздо более сложна и удобно отговорки дизайнер компании Microsoft от поощрения плохой практики.

Чтобы быть совершенно откровенным, я думаю, что основные проблемы MVC справедливы для любой реализации MVP, и различия почти полностью семантические. Пока вы следите за разделением интересов между представлением (которое отображает данные), контроллером (который инициализирует и контролирует взаимодействие с пользователем) и моделью (базовые данные и / или службы)), вы получаете преимущества MVC. , Если вы получаете преимущества, то кого действительно волнует, является ли ваш паттерн MVC, MVP или Supervising Controller? Единственный реальный образец остается как MVC, остальные просто отличаются его разновидностями.

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

Лично я считаю, что MVP был недавно вновь введен в качестве броского термина для сокращения споров между семантическими фанатиками, которые утверждают, является ли что-то действительно MVC или нет, или для оправдания инструментов быстрой разработки приложений Microsoft. Ни одна из этих причин в моих книгах не оправдывает его существование как отдельную модель проектирования.

Автор: Quibblesome Размещён: 25.08.2008 09:22

1935 плюса

8313 Репутация автора

Решение

Model-View-Presenter

В MVP Presenter содержит бизнес-логику пользовательского интерфейса для представления. Все вызовы из View делегируются непосредственно в Presenter. Презентатор также отделен непосредственно от представления и общается с ним через интерфейс. Это делается для того, чтобы разрешить насмешку над видом в модульном тесте. Одним из общих атрибутов MVP является то, что должно быть много двусторонней диспетчеризации. Например, когда кто-то нажимает кнопку «Сохранить», обработчик события делегирует метод «OnSave» докладчика. Как только сохранение завершено, Presenter затем перезвонит представлению через его интерфейс, чтобы представление могло отобразить, что сохранение завершено.

MVP имеет тенденцию быть очень естественной моделью для достижения отдельного представления в веб-формах. Причина в том, что представление всегда создается первым во время выполнения ASP.NET. Вы можете узнать больше об обоих вариантах .

Два основных варианта

Пассивное представление: представление настолько глупо, насколько это возможно, и содержит практически нулевую логику. Ведущий - средний человек, который говорит с Видом и Моделью. Вид и Модель полностью защищены друг от друга. Модель может вызывать события, но докладчик подписывается на них для обновления представления. В пассивном просмотре нет прямой привязки данных, вместо этого вид предоставляет свойства сеттера, которые Presenter использует для установки данных. Все состояние управляется в Presenter, а не View.

  • Pro: максимальная тестируемость поверхности; чистое разделение вида и модели
  • Con: больше работы (например, всех свойств установщика), так как вы делаете все привязки данных самостоятельно.

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

  • Pro: благодаря использованию привязки данных количество кода уменьшается.
  • Против: там меньше тестируемой поверхности (из-за привязки данных), и в представлении меньше инкапсуляции, поскольку он напрямую взаимодействует с моделью.

Model-View-Controller

В MVC контроллер отвечает за определение того, какое представление отображать в ответ на любое действие, в том числе при загрузке приложения. Это отличается от MVP, где действия направляются через представление к докладчику. В MVC каждое действие в представлении соотносится с вызовом контроллера и действием. В сети каждое действие включает в себя обращение к URL-адресу, на другой стороне которого есть контроллер, который отвечает. Как только этот Контроллер завершит свою обработку, он вернет правильный вид. Последовательность продолжается таким образом на протяжении всей жизни приложения:

    Действие в представлении
        -> Вызов на контроллер
        -> Логика контроллера
        -> Контроллер возвращает представление.

Еще одно большое отличие от MVC заключается в том, что представление напрямую не связывается с моделью. Представление просто визуализируется и полностью не имеет состояния. В реализациях MVC View обычно не имеет никакой логики в коде позади. Это противоречит MVP, где это абсолютно необходимо, потому что, если View не делегирует Presenter, он никогда не будет вызван.

Модель презентации

Еще один шаблон, на который стоит обратить внимание, - это модель представления.шаблон. В этом шаблоне нет предъявителя. Вместо этого представление напрямую связывается с моделью представления. Модель презентации - это модель, созданная специально для просмотра. Это означает, что эта Модель может раскрывать свойства, которые никогда не наденут на модель предметной области, поскольку это будет нарушением разделения интересов. В этом случае модель представления связывается с моделью предметной области и может подписываться на события, поступающие из этой модели. Затем представление подписывается на события, поступающие из модели презентации, и обновляется соответствующим образом. Модель представления может предоставлять команды, которые представление использует для вызова действий. Преимущество этого подхода состоит в том, что вы можете по существу полностью удалить код, поскольку PM полностью инкапсулирует все поведение представления.Модель-Вид-ВидМодель .

В MSDN есть статья о модели представления и раздел в Руководстве по составным приложениям для WPF (прежняя призма) об отдельных шаблонах представления.

Автор: Glenn Block Размещён: 19.09.2008 12:46

13 плюса

955 Репутация автора

Оба являются шаблонами, пытающимися отделить представление и бизнес-логику, отделяя бизнес-логику от аспектов пользовательского интерфейса.

Архитектурно, MVP - это подход, основанный на контроллере страниц, где MVC - подход, основанный на фронт-контроллере Это означает, что в стандартном MVP жизненный цикл страницы веб-формы просто улучшается за счет извлечения бизнес-логики из кода. Другими словами, страница - это тот, который обслуживает http-запрос. Другими словами, MVP IMHO - это веб-форма эволюционного типа улучшения. MVC, с другой стороны, полностью меняет игру, потому что запрос перехватывается классом контроллера перед загрузкой страницы, тут же выполняется бизнес-логика, а затем в конечном результате обработки контроллером данных, только что сброшенных на страницу («представление»). смысл MVC (по крайней мере для меня) во многом похож на разновидность MVP в Supervising Controller, улучшенную с помощью механизма маршрутизации

Оба они включают TDD и имеют свои минусы и минусы.

Решение о том, как выбрать один из них, ИМХО, должно основываться на том, сколько времени вы потратили на разработку веб-формы ASP NET. Если бы кто-то считал себя хорошим в веб-формах, я бы предложил MVP. Если бы вы чувствовали себя не очень комфортно в таких вещах, как жизненный цикл страницы и т. Д., MVC мог бы быть здесь.

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

http://blog.vuscode.com/malovicn/archive/2007/12/18/model-view-presenter-mvp-vs-model-view-controller-mvc.aspx

Автор: Nikola Malovic Размещён: 21.09.2008 12:32

9 плюса

824 Репутация автора

Я использовал и MVP, и MVC, и хотя мы, как разработчики, склонны концентрироваться на технических различиях обоих шаблонов, точка зрения на MVP в IMHO гораздо больше связана с простотой принятия, чем с чем-либо еще.

Если я работаю в команде, которая уже хорошо разбирается в стиле разработки веб-форм, гораздо проще представить MVP, чем MVC. Я бы сказал, что MVP в этом сценарии - быстрая победа.

Мой опыт подсказывает мне, что перевести команду из веб-форм в MVP, а затем из MVP в MVC относительно легко; переход от веб-форм к MVC сложнее.

Я оставляю здесь ссылку на серию статей, опубликованных моим другом о MVP и MVC.

http://www.qsoft.be/post/Building-the-MVP-StoreFront-Gutthrie-style.aspx

Автор: Pedro Santos Размещён: 02.01.2009 10:35

6 плюса

3268 Репутация автора

Мой скромный короткий взгляд: MVP для больших масштабов и MVC для маленьких масштабов. С MVC я иногда чувствую, что V и C можно увидеть с двух сторон одного неделимого компонента, который напрямую связан с M, и одна неизбежно падает на это при переходе к более коротким масштабам, таким как элементы управления пользовательского интерфейса и базовые виджеты. На этом уровне детализации MVP имеет мало смысла. Когда человек, напротив, переходит в более масштабные масштабы, правильный интерфейс становится более важным, то же самое происходит с однозначным распределением обязанностей, и здесь появляется MVP.

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

Автор: Hibou57 Размещён: 20.02.2013 04:55

8 плюса

700 Репутация автора

В MVP представление извлекает данные из презентатора, который рисует и подготавливает / нормализует данные из модели, в то время как в MVC контроллер извлекает данные из модели и устанавливает, нажимая в представлении.

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

MVP обычно использует какую-то структуру привязки, такую ​​как среда привязки Microsoft WPF или различные рамки привязки для HTML5 и Java.

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

Так, если, например, модель является автомобилем, то презентатор - это своего рода презентатор автомобиля, который отображает свойства автомобиля (год, производитель, количество мест и т. Д.). Представление знает, что текстовое поле с именем 'car maker' должно отображать свойство Presenter Maker.

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

Этот связующий фреймворк, если его урезать, на самом деле это контроллер :-)

Итак, вы можете посмотреть на MVP как на эволюцию MVC.

MVC - это здорово, но проблема в том, что обычно его контроллер на просмотр. Контроллер A знает, как устанавливать поля представления A. Если теперь вы хотите, чтобы представление A отображало данные модели B, вам нужен контроллер A, чтобы узнать модель B, или вам нужен контроллер A, чтобы получить объект с интерфейсом - который похож на MVP только без привязок, или вам нужно переписать код набора пользовательского интерфейса в контроллере B.

Вывод - MVP и MVC оба являются развязкой шаблонов пользовательского интерфейса, но MVP обычно использует структуру привязок, которая находится под MVC. THUS MVP находится на более высоком архитектурном уровне, чем MVC, и шаблон оболочки выше MVC.

Автор: James Roeiter Размещён: 07.06.2013 09:16

422 плюса

11201 Репутация автора

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

MVC

MVC

MVP

введите описание изображения здесь

Автор: Phyxx Размещён: 06.07.2013 10:18

242 плюса

6893 Репутация автора

Вот иллюстрации, которые представляют коммуникационный поток

введите описание изображения здесь

введите описание изображения здесь

Автор: Ashraf Bashir Размещён: 12.09.2014 08:47

3 плюса

27918 Репутация автора

Существует много версий MVC, этот ответ о оригинальном MVC в Smalltalk. Короче говоря, это изображение MVC против MVP

Этот доклад droidcon NYC 2017 - Чистый дизайн приложения с помощью компонентов архитектуры разъясняет это

введите описание изображения здесь введите описание изображения здесь

Автор: onmyway133 Размещён: 09.09.2015 02:34

73 плюса

4585 Репутация автора

введите описание изображения здесь

MVC (модель просмотра контроллера)

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

MVP (ведущий модельного представления)

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

Для получения дополнительной ссылки

Автор: AVI Размещён: 20.12.2015 02:10

-1 плюса

2041 Репутация автора

MVP

MVP расшифровывается как Model - View-Presenter. Это стало известно в начале 2007 года, когда Microsoft представила Windows-приложения Smart Client.

Presenter выступает в роли наблюдателя в MVP, который связывает события и бизнес-логику с моделями.

Привязка события представления будет реализована в Presenter из интерфейса представления.

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

Плюсы: у View есть только пользовательский интерфейс, а не логика. Высокий уровень тестируемости.

Минусы: немного сложнее и больше работы при реализации привязки событий

MVC

MVC расшифровывается как Model-View-Controller. Контроллер отвечает за создание моделей и рендеринг представлений с привязкой моделей.

Контроллер является инициатором, и он решает, какое представление визуализировать.

Плюсы: акцент на принципе единой ответственности Высокий уровень тестируемости

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

Автор: marvelTracker Размещён: 12.01.2016 04:50

22 плюса

1104 Репутация автора

Каждый из них решает разные проблемы и может даже объединяться, чтобы получить что-то вроде ниже

Комбинированная модель

Здесь также есть полное сравнение MVC, MVP и MVVM.

Автор: Xiaoguo Ge Размещён: 13.03.2017 05:54

2 плюса

896 Репутация автора

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

Автор: Clive Jefferies Размещён: 16.11.2017 05:32

26 плюса

881 Репутация автора

Model-View-Controller

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

  • Модели для обработки данных и бизнес-логики
  • Контроллеры для обработки пользовательского интерфейса и приложения
  • Представления для обработки объектов графического интерфейса пользователя и представления

Чтобы сделать это немного более понятным, давайте представим простое приложение со списком покупок. Все, что нам нужно, это список названий, количества и цены каждого товара, который нам нужно купить на этой неделе. Ниже мы опишем, как мы могли бы реализовать некоторые из этих функций, используя MVC.

введите описание изображения здесь

Model-View-Presenter

  • Модель представляет собой данные , которые будут отображаться в окне просмотра (пользовательский интерфейс).
  • Вид представляет собой интерфейс , который отображает данные (модель) и команды маршрутов пользователей (события) к выступающему действовать в соответствии с этими данными. Представление обычно имеет ссылку на своего докладчика.
  • Ведущий является «средним человеком» ( в исполнении контроллера в MVC) и имеют ссылки на оба, вид и модель. Обратите внимание, что слово «Модель» вводит в заблуждение. Скорее, это должна быть бизнес-логика, которая извлекает или манипулирует моделью . Например: если у вас есть база данных, хранящая пользователя в таблице базы данных, и ваше представление хочет отобразить список пользователей, то у докладчика будет ссылка на бизнес-логику вашей базы данных (например, DAO), откуда докладчик будет запрашивать список пользователей.

Если вы хотите увидеть пример с простой реализацией, пожалуйста, проверьте этот пост на GitHub

Конкретный рабочий процесс запроса и отображения списка пользователей из базы данных может работать следующим образом: введите описание изображения здесь

В чем разница между шаблонами MVC и MVP ?

MVC Pattern

  • Контроллер основан на поведении и может быть разделен между представлениями

  • Может быть ответственным за определение того, какой вид отображать (шаблон переднего контроллера)

MVP Pattern

  • Вид более слабо связан с моделью. Докладчик отвечает за привязку модели к представлению.

  • Легче для модульного тестирования, потому что взаимодействие с представлением осуществляется через интерфейс

  • Обычно вид на карту докладчика один к одному. Сложные представления могут иметь несколько докладчиков.

Автор: Rahul Размещён: 29.11.2017 10:14

3 плюса

1170 Репутация автора

Есть это хорошее видео от дяди Боба, где он кратко объясняет MVC и MVP в конце.

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

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

Надеюсь, это поможет лучше.

Автор: stdout Размещён: 25.01.2018 09:24

50 плюса

2729 Репутация автора

Есть много ответов на этот вопрос, но я чувствовал, что нужен какой-то действительно простой ответ, четко сопоставляющий эти два вопроса. Вот обсуждение, которое я придумал, когда пользователь ищет название фильма в приложении MVP и MVC:

Пользователь: Нажмите, нажмите ...

Вид : Кто это? [ MVP | MVC ]

Пользователь: Я только что нажал на кнопку поиска ...

Вид : Хорошо, подожди секундочку ... [ MVP | MVC ]

( Просмотр вызова Presenter | контроллер ...) [ MVP | MVC ]

Вид : Эй, Ведущий | Контроллер , Пользователь только что нажал на кнопку поиска, что мне делать? [ MVP | MVC ]

Ведущий | Контролер : Эй, вид , есть ли поисковый запрос на этой странице? [ MVP | MVC ]

Вид : Да, вот оно… «пианино» [ MVP | MVC ]

Докладчик : Спасибо, View ... пока я ищу поисковый запрос по модели , пожалуйста, покажите ему / ей индикатор выполнения [ MVP | MVC ]

( Ведущий | Контроллер вызывает модель …) [ MVP | MVC ]

Ведущий | Контроллер : Эй, модель , у тебя есть совпадение по этому поисковому запросу: «фортепиано» [ MVP | MVC ]

Модель : Эй, ведущий | Контроллер , дай мне проверить… [ MVP | MVC ]

( Модель делает запрос к базе данных фильма…) [ MVP | MVC ]

( Спустя некоторое время ... )

-------------- Здесь MVP и MVC начинают расходиться ---------------

Модель : Я нашел для вас список, ведущий , вот он в формате JSON «[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} ] »[ MVP ]

Модель : Есть некоторый результат, Контроллер . Я создал переменную поля в моем экземпляре и заполнил ее результатом. Это имя "searchResultsList" [ MVC ]

( Ведущий | Контроллер благодарит Модель и возвращается к Представлению ) [ MVP | MVC ]

Ведущий : Спасибо за ожидание View , я нашел для вас список подходящих результатов и упорядочил их в презентабельном формате: ["Piano Teacher 2001", "Piano 1993"]. Пожалуйста, покажите это пользователю в вертикальном списке. Также, пожалуйста, скройте индикатор прогресса сейчас [ MVP ]

Контроллер : Спасибо за ожидание, View , я спросил модель о вашем поисковом запросе. Он говорит, что нашел список совпадающих результатов и сохранил их в переменной с именем "searchResultsList" внутри своего экземпляра. Вы можете получить это оттуда. Также, пожалуйста, скройте индикатор прогресса сейчас [ MVC ]

Просмотр : Большое спасибо Ведущий [ MVP ]

Вид : Спасибо «Controller» [ MVC ] (Теперь View спрашивает себя: Как я должен представить результаты , которые я получаю от модели ? Пользователю Если год выпуска фильма пришел первый или последний ... Если это? быть в вертикальном или горизонтальном списке? ...)

В случае , если вы заинтересованы, я пишу серию статей , посвященных приложения архитектурных паттерны (MVC, MVP, MVVP, чистая архитектура, ...) , сопровождающийся репо Github здесь . Несмотря на то, что образец написан для Android, основные принципы могут быть применены к любому носителю.

Автор: Ali Nem Размещён: 06.04.2018 01:51

1 плюс

3922 Репутация автора

Я думаю, что это изображение Эрвина Вандервалька (и сопровождающая статья ) является лучшим объяснением MVC, MVP и MVVM, их сходства и различий. Статья не отображается в результатах поиска по запросам на «MVC, MVP и MVVM» , потому что название статьи не содержит слова «MVC» и «MVP»; но это лучшее объяснение, я думаю.

изображение, объясняющее MVC, MVP и MVVM - Эрвин Вандервальк

(Эта статья также соответствует тому, что дядя Боб Мартин сказал в одном из своих выступлений: что MVC изначально был разработан для небольших компонентов пользовательского интерфейса, а не для архитектуры системы)

Автор: Jboy Flaga Размещён: 10.05.2019 01:43

0 плюса

11 Репутация автора

  • В MVC View имеет часть пользовательского интерфейса, контроллер является посредником между представлением и моделью, а модель содержит бизнес-логику.
  • В MVP View содержит как пользовательский интерфейс, так и реализацию презентатора, поскольку здесь презентатор представляет собой просто интерфейс, а модель - то же самое, то есть содержит бизнес-логику.
Автор: Chinmai Kulkarni Размещён: 09.09.2019 07:31
Вопросы из категории :
32x32