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

Для кого это определенное время не имеет значения для Load Address следующим образом:

Jan 14 11:02:39 Dennins-iPhone AppName[584] <Critical>: Stack Trace: (
    0   CoreFoundation                      0x2c3084b7 <redacted> + 150
    1   libobjc.A.dylib                     0x39abec8b objc_exception_throw + 38
    2   CoreFoundation                      0x2c21cc35 CFRunLoopRemoveTimer + 0
    3   AppName                             0x0005a7db AppName + 272347  

Я создал простой bash, чтобы помочь мне отлаживать:

#! /bin/bash
read -p "[Path] [App Name] [Stack Address] [DecimalSum] " path appName stackAddress decimalSum
loadAddress=`echo "obase=16;ibase=10;$((stackAddress-decimalSum))" | bc`
atos -o $path/Payload/$appName.app/$appName -l $loadAddress $stackAddress -arch armv7

Он просто читает путь для приложения, имя приложения, адрес стека и значение после сигнала «+» (десятичное значение), а затем найдите значение для адреса загрузки для запуска команды atos.

2046
задан Peter Mortensen 4 May 2015 в 03:26
поделиться

11 ответов

Образцовый предъявитель представления

В [1 122] MVP, Предъявитель содержит бизнес-логику UI для Представления. Все вызовы от Представления делегируют непосредственно Предъявителю. Предъявитель также разъединяется непосредственно от Представления и говорит с ним через интерфейс. Это должно позволить дразнить Представления в модульном тесте. Один общий атрибут MVP - то, что должна быть большая двухсторонняя диспетчеризация. Например, когда кто-то нажимает кнопку "Save", делегатов обработчиков событий к методу Предъявителя "OnSave". Как только сохранение завершается, Предъявитель тогда перезвонит Представлению через его интерфейс так, чтобы Представление могло отобразить это, сохранение завершилось.

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

Два основных изменения

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

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

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

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

Образцовый Контроллер Представления

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

    Action in the View
        -> Call to Controller
        -> Controller Logic
        -> Controller returns the View.

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

Модель

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

существует статья MSDN о Модели Представления и разделе в Руководство Составного приложения WPF (прежняя Призма) [приблизительно 115] Разделенные Шаблоны Представления

1932
ответ дан 11 revs, 9 users 57% 4 May 2015 в 03:26
поделиться

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

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

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

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

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

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

третья "разновидность" MVP (или кто-то, возможно, назвал бы его отдельным шаблоном) является Моделью Представления (или иногда упоминаемый Model-View-ViewModel). По сравнению с MVP Вы "объединяете" M и P в один класс. Вы сделали, чтобы Ваш клиент возразил, с которым Вашими виджетами UI данные, связанные, но у Вас также есть дополнительные поля UI-spesific как "IsButtonEnabled" или "IsReadOnly", и т.д.

я думаю лучший ресурс, который я нашел к архитектуре UI, серия сообщений в блоге, сделанных Jeremy Miller, законченным в Сборка Ваше Собственное Серийное Оглавление CAB . Он покрыл все разновидности MVP и показал код C# для реализации их.

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

33
ответ дан Peter Mortensen 4 May 2015 в 03:26
поделиться

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

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

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

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

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

, Чтобы, возможно, понять различие MVC ASP.NET от MVP проверьте это представление MIX Scott Hanselman.

18
ответ дан Matt Mitchell 4 May 2015 в 03:26
поделиться
  • MVP = Образцовый Предъявитель Представления
  • MVC = Образцовый Контроллер Представления

    1. Оба шаблона представления. Они отделяются, зависимости между Моделью (думайте Объекты области), Ваш экран/веб-страница (Представление), и как Ваш UI, как предполагается, ведет себя (Предъявитель/Контроллер)
    2. , Они довольно подобны в понятии, люди инициализируют Предъявителя/Контроллер по-другому в зависимости от вкуса.
    3. А большая статья о различиях здесь . Самый известный то, что шаблон MVC имеет Модель, обновляющую Представление.
35
ответ дан Andrii Nemchenko 4 May 2015 в 03:26
поделиться

MVP: представление является главным.

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

MVC: контроллер является главным.

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

105
ответ дан Peter Mortensen 4 May 2015 в 03:26
поделиться

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

, Чтобы быть совершенно откровенным, я думаю, что базовые проблемы MVC сохраняются для любой реализации MVP, и различия являются почти совершенно семантическими. Пока Вы следуете за разделением проблем между представлением (который отображает данные), контроллер (который инициализирует и управляет взаимодействием с пользователем) и модель (базовые данные и/или сервисы)), тогда, Вы достигаете преимуществ MVC. Если Вы достигаете преимуществ тогда, кто действительно заботится, является ли Ваш шаблон MVC, MVP или Контроллером Наблюдения? [Только 114] реальные шаблон остается как MVC, остальные просто отличаются ароматы его.

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

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

166
ответ дан Quibblesome 4 May 2015 в 03:26
поделиться

Я вел блог об этом некоторое время назад, заключая в кавычки на превосходное сообщение Todd Snyder на различии между два :

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

Шаблон MVP

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

Шаблон MVC

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

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

409
ответ дан Peter Mortensen 4 May 2015 в 03:26
поделиться

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

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

, Они оба включают TDD и имеют оборотные стороны и позитивные аспекты.

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

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

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

13
ответ дан Nikola Malovic 4 May 2015 в 03:26
поделиться

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

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

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

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

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

9
ответ дан Pedro Santos 4 May 2015 в 13:26
поделиться
  • 1
    @epig.... TRUE или FALSE являются значениями. Работает отлично! Спасибо – MikeTWebb 1 February 2012 в 07:16
  • В MVC, Представление имеет часть UI, контроллер является посредником между представлением и моделью & модель содержит бизнес-логику.
  • В MVP, Представление содержит и UI и реализацию предъявителя, так как здесь предъявитель является просто интерфейсом & модель является тем же т.е. содержит бизнес-логику.
1
ответ дан 22 November 2019 в 19:59
поделиться

Вы забыли приблизительно [1 120] Доменный Респондент Действия ( ADR).

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

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

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

Вместо этого взгляните на Доменный Респондент Действия . В ADR Контроллер добирается Действие , который выполнит операцию в Модель/Домен . До сих пор, то же. Различие, оно затем собирает ответ/данные той операции, и передайте его Респондент ( eg:. view() ) для рендеринга. Когда новое действие требуют на том же компоненте, , Контроллер называют снова, и цикл повторяется. В ADR, существует никакое соединение между Моделью/Доменом и Представлением ( ответ Reponser ).

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

1
ответ дан 22 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: