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

голоса
1k

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

  1. Какие вопросы эти модели решения?
  2. Как они похожи?
  3. Насколько они разные?
Задан 05/08/2008 в 11:06
источник пользователем
На других языках...                            


28 ответов

голоса
15

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

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

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

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

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

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

Ответил 05/08/2008 в 11:20
источник пользователем

голоса
381

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

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

MVP шаблон

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

MVC шаблон

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

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

Ответил 05/08/2008 в 11:21
источник пользователем

голоса
31
  • MVP = Model-View-Presenter
  • MVC = Model-View-Controller

    1. Обе презентации модели. Они отделяют зависимости от модели (думаю объекты домена), ваш экран / веб-страницы (вид), и как ваш пользовательский интерфейс должен вести себя (Presenter / Controller)
    2. Они довольно похожи по концепции, люди инициализации Presenter / Controller по-разному в зависимости от вкуса.
    3. Большая статья о различиях находится здесь . Наиболее примечательным является то , что MVC шаблон имеет модель обновляет вид.
Ответил 05/08/2008 в 11:22
источник пользователем

голоса
85

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

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

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

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

Ответил 06/08/2008 в 23:51
источник пользователем

голоса
31

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

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

Ваша реализация может выглядеть следующим образом:

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

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

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

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

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

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

Ответил 08/08/2008 в 06:55
источник пользователем

голоса
147

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

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

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

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

Ответил 25/08/2008 в 22:22
источник пользователем

голоса
1k

Model-View-Presenter

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

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

Две первичные вариации

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

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

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

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

Model-View-Controller

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

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

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

Презентация модели

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

Существует статье MSDN о презентации модели и раздел в Composite Application Руководство для WPF (бывший Prism) о разлуке презентации Шаблоны

Ответил 19/09/2008 в 13:46
источник пользователем

голоса
12

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

С точки зрения архитектуры MVP является подход, основанный на Page Controller, где MVC является подход, основанный на Front Controller. Это означает, что в ПМК стандартный веб-страница формы жизненного цикла только усиливается путем извлечения бизнес-логики от кода позади. Другими словами, страница запроса HTTP один обслуживание. Другими словами, MVP ИМХО веб-форма эволюционного тип аксессуара. MVC с другой стороны полностью меняет игру, потому что запрос получает перехвачен классом контроллера до загрузки страницы, бизнес-логика выполняется там, а затем в конечном результате контроллера обработки данных просто сбрасывали на страницу ( «вид») в том, что смысл, MVC выглядит (по крайней мере для меня) много надзорным контроллера привкусом MVP с расширенной маршрутизации двигателя

Оба они позволяют TDD и имеют недостатки и расквитаться.

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

Вот еще один блог ссылку дать немного больше информации по этой теме

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

Ответил 21/09/2008 в 13:32
источник пользователем

голоса
8

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

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

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

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

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

Ответил 02/01/2009 в 11:35
источник пользователем

голоса
9

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

Если мы рассматриваем программирование как структуры данных + алгоритмы, то не было бы лучше, чтобы иметь структуры данных сделаны явно, насколько это возможно, а затем разработать алгоритмы, которые зависят от каждых в небольшой части данных, как это возможно, с минимальной связью между алгоритмами ?

Я чувствую очень Java-эск модели FactoryFactoryFactory мысли здесь - мы хотим иметь несколько представлений, несколько моделей, несколько степеней свободы повсюду. Это почти как что является движущей силой MVC и MVP и этажерки. Теперь позвольте мне спросить: как часто стоимость вы платите за это (и там определенно есть стоимость) стоит?

Я также не вижу дискуссии о том, как эффективно управлять состоянием между HTTP-запросов. Разве мы не узнали из функциональных людей (и объемных ошибок, сделанных императивными спагетти), что государство является злом и должно быть сведены к минимуму (и при использовании, должно быть хорошо изучены)?

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

Ответил 28/01/2009 в 22:11
источник пользователем

голоса
6

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

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

Ответил 20/02/2013 в 17:55
источник пользователем

голоса
7

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

В ПМК вы можете иметь один вид работы с несколькими типами ведущих и один ведущим работает с различными несколькими представлениями.

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

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

Так, если, например, модель автомобиля, то ведущий своего рода автомобильный ведущий, раскрывает свойства автомобиля (год, мейкера, сиденья и т.д.) в представлении. Мнение знает, что текстовое поле под названием «автопроизводитель» необходимо отобразить свойство предъявителя Maker.

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

Эта привязка рамки, если вы удалите его, на самом деле это контроллер :-)

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

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

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

Ответил 07/06/2013 в 22:16
источник пользователем

голоса
358

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

MVC

MVC

MVP

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

Ответил 06/07/2013 в 23:18
источник пользователем

голоса
202

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

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

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

Ответил 12/09/2014 в 21:47
источник пользователем

голоса
3

Есть много версий MVC, этот ответ об оригинальном MVC в Smalltalk. Короче говоря, это Изображение MVC против МВП

Этот разговор droidcon Нью - Йорка 2017 года - Чистый дизайн приложения с архитектурой компонентами уточняет его

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

Ответил 09/09/2015 в 02:34
источник пользователем

голоса
58

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

MVC (Model-контроллер)

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

MVP (Model View Presenter)

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

Для получения более подробной ссылки

Ответил 20/12/2015 в 02:10
источник пользователем

голоса
0

MVP

MVP выступает за модель - Вид- Presenter. Это стало представить в начале 2007 года, когда Microsoft представила Smart Client окна приложения.

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

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

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

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

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

MVC

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

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

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

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

Ответил 12/01/2016 в 04:50
источник пользователем

голоса
8

В Android есть версия MVC, которая является MVP: Что такое MVP?

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

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

Примером для ПМК является https://github.com/antoniolg/androidmvp

Что такое MVC? MVC архитектура является одним из самых старых моделей, доступных для достижения разделения интересов. MVC состоит из трех слоев, а именно, модели, вида и контроллера.

Классический MVC существовал в то время, когда каждый элемент управления / гаджет, который существовал на экране считается немой и каждый элемент управления в паре со своим собственным контроллером для управления взаимодействия с пользователем, происходящих на них. Так что, если есть 10 гаджетов, то 10 контроллеров должны существовать. В этом случае, каждый гаджет считается как вид. Появление систем с графическим интерфейсом Windows, изменили эту картину. Отношения Control-контроллер стали устаревшими. Органы управления получили интеллект реагировать на действия, инициированных пользователем. В мире Windows, вид представляет собой поверхность, на которой существует все элементы управления / устройство, следовательно, есть необходимость только один контроллер. Просмотр может получать события и достичь контроллеров помогут сделать дальнейшую обработку.

Пример код для MVC в андроиде http://androidexample.com/Use_MVC_Pattern_To_Create_Very_Basic_Shopping_Cart__-_Android_Example/index.php?view=article_discription&aid=116&aaid=138

Разница между обоими доступна здесь http://www.codeproject.com/Articles/288928/Differences-between-MVC-and-MVP-for-Beginners

Теперь из моего опыта вы должны использовать MVP для проекта андроида основе, потому что это расширенная версия MVC модели.

Ответил 02/07/2016 в 07:15
источник пользователем

голоса
11

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

Комбинированный шаблон

Существует также полное сравнение MVC, MVP и MVVM здесь

Ответил 13/03/2017 в 05:54
источник пользователем

голоса
-2

Многие люди не знают точно, какова разница между контроллером и Presenter в MVC и MVP соответственно.

его простое уравнение, где

MVC View = Просмотр и Выступающий из MVP

MVP Модель = контроллер и модель MVC

подробнее относятся к этому http://includeblogh.blogspot.com.eg/2016/07/the-difference-and-relationship-between.html

Ответил 31/07/2017 в 10:13
источник пользователем

голоса
-1

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

Ответил 16/11/2017 в 17:32
источник пользователем

голоса
5

Model-View-Controller

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

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

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

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

Model-View-Presenter

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

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

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

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

MVC шаблон

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

  • Может быть ответственными за определение какого вида отображения (Front Controller Pattern)

MVP шаблон

  • Просмотр более слабо связан с моделью. Ведущий отвечает за связывание модели с точки зрения.

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

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

Ответил 29/11/2017 в 10:14
источник пользователем

голоса
0

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

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

Ответил 25/01/2018 в 21:24
источник пользователем

голоса
8

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

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

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

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

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

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

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

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

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

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

( Presenter | Контроллер называет модель ...) [ MVP | MVC ]

Выступающий | Контроллер : Эй Модель , Есть ли у вас какие - либо матч для этого поиска термина ?: «пиано» [ MVP | MVC ]

Модель : Эй Presenter | Контроллер , позвольте мне проверить ... [ MVP | MVC ]

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

( Через некоторое время ... )

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

Модель : я нашел список для вас, Presenter , здесь в формате JSON «[{ "Имя": "Пианистка", "год": 2001}, { "имя": "Фортепиано", "год": 1993} ]»[ MVP ]

Модель : Существует некоторый результат доступен, контроллер . Я создал переменные поля в моем случае , и наполнил ее результат. Это имя «searchResultsList» [ MVC ]

( Presenter | Контроллер благодаря модели и возвращается к View ) [ MVP | MVC ]

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

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

Вид : Большое спасибо Presenter [ MVP ]

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

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

Ответил 06/04/2018 в 13:51
источник пользователем

голоса
-2

Здесь размещено выше суммирование неудачи человека и неспособности понять простейшее рукопожатие между двумя машинами. Я объясню, используя здравый смысл, чтобы попытаться разбудить вас все от этих бредового идеализма о том, что нашел свой путь в умы тех, кто хочет создать их. И так же глупо, как все эти процессы звук, дело в том, объектная модель (которая является HTML-файла) запрашивается клиентской машине. Вот как все это сводится.

  1. Один гиперссылок нажимается и один запрос отправляется на машине клиента к серверу. Сервер отвечает на этот запрос с ответом, посылая объектную модель Клиента. (Известный просто как «ответ»).
  2. Сервер Реагирует путем отправки модели объекта (HTML файл) к машине клиентов (известная как Full Рукопожатие).
  3. Клиенты Браузер теперь Рендер «View» на разборе, лексический / tokenizing и преобразования этого объекта Model Markup в GUI «View».

Я могу быть сейчас на пенсии, но Гоша вы, ребята, здесь спорить и обсуждать сущие пустяки. И если честно, независимо от того, что вы называете Рукопожатие между двумя машинами не может быть ничего вне одного запроса, один ответ из объекта «Модель» и, наконец, Clients Browser Rendering «Просмотр».

И в заключении, вид не существует в рукопожатии. Объектная модель является лишь Разметка для браузера, чтобы преобразовать в виджет Наборы и методы Eval три или более моделей объектов. HTML, CSS и JavaScript. И независимо от того, сколько кто-нибудь может сказать сервер не делает что-то из ряда вон выходящим является конским навозом.

«Сервер» не «контроллер» это Directer и только направляет ответ, посылая объект «Модель» Response. Браузер клиента (который был бы, вероятно, контроллер), а затем создает «View» из объекта «Модель» Сервер не имеет ничего общего с этим. Ваш язык Компьютер не может попасть в модели объекта вообще, ни передать его. Все это является Markup Creator.

Весь бардак просто сторона браузер клиента «контроллер», который разбирает «модель» для визуализации «View» или Ц или MCV (посланный в качестве модели в первом порядке), и вы не можете изменить его. Но вы можете называть его просто Запрос, Response Object Model и Render View или RRMV.

Ответил 31/12/2018 в 02:10
источник пользователем

голоса
0

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

изображение объяснения MVC, MVP и MVVM - Эрвин Vandervalk

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

Ответил 10/05/2019 в 04:43
источник пользователем

голоса
-1
  • В MVC, View имеет часть пользовательского интерфейса, контроллер является посредником между представлением и моделью и моделью содержит бизнес-логику.
  • В ПКА View содержит как интерфейс и реализацию ведущего, так как здесь ведущее это просто интерфейс и модель такого же, т.е. содержит бизнес-логику.
Ответил 09/09/2019 в 22:31
источник пользователем

голоса
0

Вы забыли о Action-Domain-ответчике ( ADR ).

Как объяснялось в некоторых выше графике, есть прямая связь / связь между моделью и видом в MVC. Действие выполняется на контроллере , который будет выполнять действие на модели . Это действие в модели , будет вызывать реакцию в View . View , всегда обновляются , когда Типовое изменение состояния «s.

Некоторые люди забывают, что MVC был создан в конце 70" , и что Web был создан только в конце 80 „/ начале 90“. MVC не был изначально создан для Web, но для настольных приложений вместо этого, когда контроллер , модель и просмотр будет сосуществовать вместе.

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

Вместо этого, посмотрите на Action-Domain-ответчике . В ДОПОГ контроллер получает Action , который будет выполнять операцию в модели / домена . До сих пор, то же самое. Разница заключается в том , что то , что операция собирает Ответные / данные, и передать его ответчику ( например :.view() ) для рендеринга. Когда новое действие запрашиваются на ту же компоненту, то контроллер вызывается снова, и цикл повторяется. В ДОПОГ, нет никакой связи между Model / Domain и View ( ответ Reponser в ).

Примечание: Википедия гласит , что « Каждое действие ДОПОГ, однако, представлены отдельными классами или затворами. ». Это не всегда верно. Несколько действия могут быть в том же контроллере, и картина все та же.

Ответил 22/10/2019 в 13:03
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more