В MVP представление извлекает данные из презентатора, который рисует и подготавливает / нормализует данные из модели, в то время как в MVC контроллер извлекает данные из модели и устанавливает, нажимая в представлении.
В MVP вы можете иметь один вид, работающий с несколькими типами докладчиков, и один докладчик, работающий с несколькими различными представлениями.
MVP обычно использует какую-то структуру привязки, такую как среда привязки Microsoft WPF или различные рамки привязки для HTML5 и Java.
В этих структурах пользовательский интерфейс / 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.