невероятно, что вы можете найти механизм SQL, выполняющий этот ...
WITH sentence AS
(SELECT
stuff,
row = ROW_NUMBER() OVER (ORDER BY Id)
FROM
SentenceType
)
SELECT
sen.stuff
FROM sentence sen
WHERE sen.row = (ABS(CHECKSUM(NEWID())) % 100) + 1
В MVP ведущий содержит бизнес-логику пользовательского интерфейса для представления. Все вызовы делегата View непосредственно в Presenter. Презентатор также отделен напрямую от представления и разговаривает с ним через интерфейс. Это должно позволить насмехаться над представлением в модульном тесте. Одним из общих атрибутов MVP является то, что должно быть много двухсторонней диспетчеризации. Например, когда кто-то нажимает кнопку «Сохранить», обработчик события делегирует метод «OnSave». Как только сохранение будет завершено, Presenter затем перезвонит View через его интерфейс, чтобы View мог показать, что сохранение завершено.
MVP имеет тенденцию быть очень естественной моделью для достижения разделенного представления в Web Forms. Причина в том, что представление всегда создается во время исполнения ASP.NET. Вы можете узнать больше об обоих вариантах .
Пассивный вид: вид настолько тупой, насколько это возможно, и содержит почти нулевую логику. Ведущий - средний человек, который разговаривает с Видом и Моделью. Вид и модель полностью защищены друг от друга. Модель может создавать события, но Presenter подписывается на них для обновления представления. В пассивном представлении нет прямой привязки данных, вместо этого View предоставляет свойства сеттера, которые Presenter использует для установки данных. Все состояние управляется в презентаторе, а не в представлении.
Контролирующий контроллер: Ведущий обрабатывает жесты пользователя. Вид привязывается к модели непосредственно через привязку данных. В этом случае задача Презентатора заключается в том, чтобы передать модель в представление, чтобы она могла привязываться к ней. Презентатор также будет содержать логику для жестов, таких как нажатие кнопки, навигация и т. Д.
В MVC контроллер отвечает за определение того, какой вид отображать в ответ на любое действие, в том числе при загрузке приложения. Это отличается от MVP, где действия маршрутизируются через View to Presenter. В MVC каждое действие в представлении коррелирует с вызовом контроллера вместе с действием. В Интернете каждое действие включает вызов URL-адреса, с другой стороны которого отвечает Контроллер. Как только этот контроллер завершит обработку, он вернет правильный вид. Последовательность продолжается таким образом на протяжении всего срока действия приложения:
Action in the View -> Call to Controller -> Controller Logic -> Controller returns the View.
Еще одна большая разница в MVC заключается в том, что представление напрямую не привязывается к модели. Взгляд просто изображается и полностью без гражданства. В реализациях MVC у View обычно не будет никакой логики в коде. Это противоречит MVP, где это абсолютно необходимо, потому что, если View не передает делегату Presenter, он никогда не будет вызван.
Еще один образец для просмотра является моделью модели представления. В этом шаблоне нет презентатора. Вместо этого представление связывается непосредственно с моделью презентации. Модель представления - это модель, созданная специально для представления. Это означает, что эта модель может выставлять свойства, которые никогда не были бы применены к модели домена, поскольку это было бы нарушением разделения. В этом случае модель представления привязывается к модели домена и может подписаться на события, исходящие из этой Модели. Затем «Вид» подписывается на события, поступающие из модели презентации, и соответственно обновляет их. Модель представления может выставлять команды, которые использует вид для вызова действий. Преимущество этого подхода заключается в том, что вы можете существенно удалить код-код вообще, поскольку PM полностью инкапсулирует все поведение для представления. Этот шаблон является очень сильным кандидатом для использования в приложениях WPF и также называется Model-View-ViewModel .
Существует статья MSDN о модели представления и раздел в Руководстве по композитным приложениям для WPF (бывший Призм) о Разделенные шаблоны презентаций
Многие люди не знают точно, в чем разница между контроллером и презентатором в MVC и MVP соответственно.
его простое уравнение, где
MVC View = Просмотр и Ведущий MVP
MVP Model = Контроллер и модель MVC
больше информации относятся к этому http://includeblogh.blogspot.com.eg/2016/07/the -разностное-и-отношения-between.html
На вопрос много ответов, но я чувствовал, что есть необходимость в каком-то действительно простом ответе, явно сравнивающем эти два вопроса. Вот обсуждение, которое я сделал, когда пользователь ищет имя фильма в приложении MVP и MVC:
Пользователь: нажмите клик ...
Просмотреть : Кто что? [MVP | MVC]
Пользователь: я просто нажал на кнопку поиска ...
Просмотреть : Хорошо, удерживайте секунд .... [MVP | MVC]
( Просмотреть , вызывающий контроллер Presenter | ...) [MVP | MVC]
Просмотреть : Привет Presenter | Контроллер , пользователь только что нажал кнопку поиска, что мне делать? [MVP | MVC]
Presenter | Контроллер : Привет Просмотреть , есть ли поисковый запрос на этой странице? [MVP | MVC]
Посмотреть : Да, ... здесь это ... «фортепиано» [MVP | MVC]
Ведущий : Спасибо Посмотреть , ... тем временем я ищу поисковый запрос на Model , пожалуйста, покажите ему / ей индикатор выполнения [MVP | MVC]
( Presenter | Контроллер вызывает Модель ...) [MVP | MVC]
Ведущий | Контроллер : Привет Модель , есть ли у вас подходящие для этого условия поиска ?: "piano" [MVP | MVC]
Модель : Привет Presenter | Контроллер , позвольте мне проверить ... [MVP | MVC]
( Модель делает запрос к базе данных фильмов ...) [MVP | MVC]
(через некоторое время ...)
---------- ---- Здесь MVP и MVC начинают расходиться ---------------
Модель : я нашел для вас список , Presenter , вот он в JSON «[{« name »:« Piano Teacher »,« year »: 2001}, {« name »:« Piano »,« year »: 1993}] "[MVP]
[g2 8] Модель : Доступен некоторый результат, Controller . Я создал переменную поля в моем экземпляре и заполнил ее результатом. Это имя «searchResultsList» [MVC]
( Presenter | Контроллер благодарит Модель и возвращается к Посмотреть ) [MVP | MVC]
Presenter : Спасибо за ожидание Просмотреть , я нашел список подходящих результатов для вас и устроили их в презентабельном формате: [«Piano Teacher 2001», «Piano 1993»]. Пожалуйста, покажите его пользователю в вертикальном списке. Controller : Спасибо за ожидание Просмотреть , я спросил Model о ваш поисковый запрос. В нем говорится, что он нашел список совпадающих результатов и сохранил их в переменной с именем «searchResultsList» внутри своего экземпляра. Вы можете получить его оттуда. : Большое спасибо Presenter [MVP] ] Просмотреть В случае, если вам интересно, я пишу серия статей, посвященных архитектурным моделям приложений (MVC, MVP, MVVP, чистая архитектура, ...), сопровождаемая репутацией Github здесь . Несмотря на то, что образец написан для андроида, основные принципы могут быть применены к любому средству.
Вот иллюстрации, которые представляют собой поток связи
[/g0] [/g1]
MVC (Model View Controller)
Вход направляется сначала на контроллер, а не на вид. Этот вход может исходить от пользователя, взаимодействующего со страницей, но также может быть просто введением определенного URL-адреса в браузер. В любом случае, это Контроллер, который сопряжен с возможностью запуска некоторых функций. Между контроллером и представлением существует взаимосвязь «один-к-одному». Это связано с тем, что один контроллер может выбирать различные представления для визуализации на основе выполняемой операции. Обратите внимание на стрелку в одну сторону от контроллера до View. Это связано с тем, что представление не имеет никакого знания или ссылки на контроллер. Контроллер действительно возвращает модель, поэтому между представлением и ожидаемой моделью передаются знания, но не Контроллер, обслуживающий его.
MVP (Model View Presenter)
Вход начинается с представления, а не с презентатора. Существует сопоставление «один к одному» между представлением и ассоциированным презентатором. В представлении содержится ссылка на презентатора. Презентатор также реагирует на события, которые запускаются из представления, поэтому он знает, что связано с ним. Презентатор обновляет представление на основе запрошенных действий, которые он выполняет в модели, но представление не относится к модели.
Для получения дополнительных ссылок
MVP
, когда приложение загружается в первый раз, разве презентатор не отвечает за загрузку первого представления? Как, например, когда мы загружаем приложение facebook, не является ли ведущий ответственным за загрузку страницы входа?
– viper
11 November 2016 в 06:18
Самый простой ответ заключается в том, как представление взаимодействует с моделью. В MVP представление привязано к ведущему, которое действует как посредник между представлением и моделью, принимает входные данные из представления, получает данные из модели, затем выполняет бизнес-логику и, наконец, обновляет представление. В MVC модель обновляет представление напрямую, а не возвращается через контроллер.
Мой скромный короткий взгляд: MVP для больших масштабов и MVC для крошечных масштабов. С MVC я когда-то ощущаю, что V и C могут видеть две стороны одного неделимого компонента, скорее привязанного к M, и неизбежно падает на это, когда он идет вниз - в более короткие масштабы, такие как элементы управления пользовательского интерфейса и базовые виджеты. На этом уровне детализации MVP имеет мало смысла. Когда кто-то, наоборот, переходит в более крупные масштабы, правильный интерфейс становится более важным, то же самое с однозначным назначением обязанностей, и здесь идет MVP.
С другой стороны, это правило шкалы большого пальца может иметь вес очень мало, когда характеристики платформы благоприятствуют каким-то отношениям между компонентами, например, с сетью, где, по-видимому, проще реализовать MVC, больше, чем MVP.
MVP
MVP означает Model-View-Presenter. Это появилось в начале 2007 года, когда Microsoft представила приложения Windows Smart Client.
Presenter выступает в роли контрольной роли в MVP, которая связывает просмотр событий и бизнес-логики с моделями.
Просмотр привязки события будет реализован в Presenter из интерфейса представления.
View является инициатором для пользовательских входов, а затем делегирует события в Presenter и ведущий обрабатывает привязки событий и получает данные из моделей.
Плюсы: View имеет только UI, а не логики High уровень тестируемости
Минусы: бит сложный и больше работы при реализации привязок событий
MVC
MVC означает Model-View-Controller. Контроллер отвечает за создание моделей и просмотр представлений с помощью моделей привязки.
Контроллер является инициатором, и он решает, какой вид рендеринга.
Плюсы: Акцент на принципах единой ответственности Высокий уровень тестируемости
Минусы: Иногда слишком большая рабочая нагрузка для контроллеров, если пытаться отображать несколько просмотров в одном контроллере.
Обе эти структуры направлены на разделение проблем - например, взаимодействие с источником данных (моделью), логикой приложения (или превращением этих данных в полезную информацию) (контроллер / презентатор) и отображаемым кодом (вид). В некоторых случаях модель также может использоваться для превращения источника данных в абстракцию более высокого уровня. Хорошим примером этого является проект MVC Storefront .
Здесь обсуждается здесь относительно различий между MVC и MVP.
Сделанное различие заключается в том, что в приложении MVC традиционно есть представление, и контроллер взаимодействует с моделью, но не друг с другом.
Конструкции MVP имеют Presenter для доступа к модели и взаимодействия с представлением.
Сказав, что ASP.NET MVC по этим определениям представляет собой структуру MVP, потому что Controller обращается к Модели, чтобы заполнить представление, которое не имеет логики (просто отображает переменные, предоставляемые контроллером).
Чтобы, возможно, получить представление об отличии ASP.NET MVC от MVP, посмотрите эту презентацию MIX Скотта Гензельмана.
Оба являются шаблонами, пытающимися отделить презентационную и бизнес-логику, отделяя бизнес-логику от аспектов пользовательского интерфейса
Архитектурно, MVP - это подход, основанный на использовании Page Controller, где MVC - подход на основе Front Controller. Это означает, что в стандартном веб-формате MVP жизненный цикл страницы просто усиливается путем извлечения бизнес-логики из кода позади. Другими словами, страница является одним из обслуживающих HTTP-запросов. Другими словами, MVP IMHO является эволюционным типом расширения веб-формы. MVC с другой стороны полностью изменяет игру, потому что запрос перехватывается классом контроллера до загрузки страницы, бизнес-логика выполняется там, а затем в конечном результате контроллера обрабатывает данные, только что сбрасываемые на страницу («вид»). В этом смысл, MVC (по крайней мере, мне) много смотрит на Supervising Controller вкус MVP, улучшенный с помощью механизма маршрутизации
. Оба из них позволяют TDD и имеют недостатки и недостатки.
Решение о том, как выбрать один из них, должно быть основано на том, сколько времени было потрачено на создание веб-формы веб-формы ASP NET. Если бы вы считали себя хорошим в веб-формах, я бы предложил MVP. Если бы вы чувствовали себя не так комфортно в таких вещах, как жизненный цикл страницы и т. Д. MVC мог бы быть здесь.
Вот еще одна ссылка для блога, дающая немного более подробную информацию по этой теме
Существует много версий MVC, этот ответ касается исходного MVC в Smalltalk. Короче говоря, это
Этот разговор droidcon NYC 2017 - Чистый дизайн приложения с компонентами архитектуры разъясняет его
UIKit
– onmyway133
14 November 2017 в 15:08
Я использовал 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
В MVP представление рисует данные от ведущего, который рисует и подготавливает / нормализует данные от модели, а в MVC контроллер рисует данные из модели и задает путем нажатия на представление.
В MVP вы можете иметь один просмотр, работающий с несколькими типами презентаторов, и один ведущий, работающий с разными множественными представлениями.
MVP обычно использует какую-то структуру привязки, такую как инфраструктура привязки Microsoft WPF или различные рамки привязки для HTML5 и Java.
В этих рамках пользовательский интерфейс / HTML5 / XAML знает, какое свойство презентатора отображает каждый элемент пользовательского интерфейса, поэтому, когда вы привязываете представление к ведущему, представление ищет свойства и знает, как извлекать данные из них и как их устанавливать, когда пользовательское значение изменяется в пользовательском интерфейсе.
Итак, если, например, модель представляет собой автомобиль, то ведущий - это своего рода автомобиль ведущий, раскрывает свойства автомобиля (год, производитель, места и т. д.). Представление знает, что текстовое поле, называемое «автопроизводителем», должно отображать свойство создателя презентатора.
Затем вы можете привязать к представлению много разных типов презентаторов, все должны иметь свойство Maker - это может быть самолет, поезд или что-то еще, представление не заботится. В представлении представлены данные от ведущего - независимо от того, что - пока он реализует согласованный интерфейс.
Эта привязка, если вы ее разделите, это на самом деле контроллер :-)
Итак, вы можете посмотреть MVP как эволюцию MVC.
MVC замечательный, но проблема в том, что обычно его контроллер на просмотр. Контроллер A знает, как установить поля View A. Если теперь вы хотите, чтобы View A отображал данные модели B, вам нужен контроллер A, чтобы знать модель B, или вам нужен контроллер A для получения объекта с интерфейсом - это похоже на MVP только без привязок, или вам нужно переписать набор UI-кода в контроллере B.
Заключение. MVP и MVC являются как развязкой шаблонов пользовательского интерфейса, но MVP обычно использует фреймворк привязок, который является MVC снизу. THUS MVP находится на более высоком архитектурном уровне, чем MVC, и шаблон оболочки выше MVC.
Это упрощение многих вариантов этих шаблонов проектирования, но это то, как мне нравится думать о различиях между ними.
MVC
[/g0]
MVP
[/g1]
MVP - not обязательно сценарий, в котором отображается представление (см., например, MVP Taligent). Мне доставляет сожаление, что люди по-прежнему проповедуют это как образец (вид в целом), а не анти-шаблон, поскольку он противоречит «Это просто взгляд» (прагматический программист). «Это просто представление» указывает, что конечное представление, отображаемое пользователю, является вторичной проблемой приложения. Microsoft MVP-шаблон делает повторное использование Views намного более сложным, а удобно оправдывает конструктор Microsoft от поощрения плохой практики.
Чтобы быть абсолютно откровенным, я думаю, что основные проблемы MVC верны для любой реализации MVP, и различия почти полностью семантичны. До тех пор, пока вы будете разделять проблемы между представлением (которое отображает данные), контроллер (который инициализирует и контролирует взаимодействие с пользователем) и модель (базовые данные и / или услуги)), тогда вы получаете преимущества MVC , Если вы получаете преимущества, то кто действительно заботится о том, является ли ваш шаблон MVC, MVP или контролером? Единственная реальная модель остается как MVC, остальные - просто разные ее ароматы.
Рассмотрим эту очень интересную статью, в которой полно перечислены некоторые из этих различные реализации. Вы можете заметить, что все они в основном делают одно и то же, но немного по-другому.
Я лично считаю, что MVP недавно был вновь представлен как броский термин, чтобы либо уменьшить аргументы между семантическими фанатиками, которые утверждают, действительно MVC или нет, или для оправдания инструментов быстрой разработки приложений Microsoft. Ни одна из этих причин в моих книгах не оправдывает его существование как отдельный шаблон дизайна.
Model-View-Controller
MVC - это шаблон для архитектуры программного приложения. Он разделяет логику приложения на три отдельные части, способствуя модульности и простоте совместной работы и повторного использования. Это также делает приложения более гибкими и приветственными итерациями. Он отделяет приложение от следующих компонентов:
Чтобы сделать это более понятным, представим простое приложение списка покупок. Все, что мы хотим, это список имен, количества и цены каждого предмета, который нам нужно купить на этой неделе. Ниже мы опишем, как реализовать некоторые из этих функций с помощью MVC.
Model-View-Presenter
Если вы хотите увидеть образец с простой реализацией, проверьте этот пост github
Конкретный рабочий процесс запроса и отображения списка пользователей из базы данных может работать следующим образом:
В чем разница между шаблонами MVC и MVP?
MVC Pattern
- Контроллер основан на поведении и может быть разделен между представлениями
- Может нести ответственность за определение отображаемого вида (Front Controller Pattern )
MVP Pattern
- Вид более слабо связан с моделью. Ведущий отвечает за привязку модели к представлению.
- Легче тестировать модуль, потому что взаимодействие с представлением осуществляется через интерфейс
- Обычно просматривайте карту презентатора один к одному. Сложные представления могут иметь несколько презентаторов.
В android есть версия mvc, которая является mvp: Что такое MVP?
Шаблон MVP позволяет отделить уровень представления от логики, так что все, о чем работает интерфейс, отделяется от того, как мы представить его на экране. В идеале шаблон MVP достигнет той же логики, которая может иметь совершенно разные и взаимозаменяемые представления.
Прежде всего, чтобы уточнить, MVP не является архитектурным шаблоном, он отвечает только за уровень представления. В любом случае всегда лучше использовать его для вашей архитектуры, которая вообще не использует его.
Примером для mvp является https://github.com/antoniolg/androidmvp
Что такое MVC? Архитектура MVC является одной из самых старых моделей, доступных для достижения разделения проблем. MVC состоит из трех уровней: Model, View и Controller.
Классический MVC существовал в то время, когда каждый элемент управления / гаджет, который существовал на экране, считался немым, и каждый элемент управления был сопряжен с собственным контроллером для управления взаимодействием пользователей с ними. Поэтому, если 10 гаджетов существуют, то 10 контроллеров должны существовать. В этом случае каждый гаджет считается представлением. Появление систем Windows GUI изменило эту картину. Отношение Control-Controller стало устаревшим. Элементы управления получили интеллект, чтобы реагировать на действия, инициированные пользователем. В мире Windows вид - это поверхность, на которой все элементы управления / гаджеты существуют, поэтому существует потребность только в одном контроллере. Просмотр может получать события и получать доступ к контроллерам для дальнейшей обработки.
Пример кода для mvc в android http://androidexample.com/Use_MVC_Pattern_To_Create_Very_Basic_Shopping_Cart__-_Android_Example/index.php?view=article_discription& help = 116 & amaid; aaid = 138
Разница между ними доступна здесь http://www.codeproject.com/Articles/288928/Differences-between-MVC-and-MVP -for-Beginners
Теперь из моего опыта вы должны использовать MVP для проекта на основе андроида, потому что это улучшенная версия MVC Model.
Что-то я не понимаю, поэтому привязка данных имеет , чтобы уменьшить тестируемость. Я имею в виду, что представление эффективно основывается на том, что можно рассматривать как один или несколько представлений базы данных, не так ли? Там могут быть соединения между строками в разных представлениях. В качестве альтернативы мы можем говорить объектно-ориентированной, а не реляционной, но это на самом деле ничего не меняет - у нас все еще есть один или несколько различных объектов данных.
Если мы рассматриваем программирование как структуры данных + алгоритмы, то не было бы лучше, если бы структуры данных были ясными максимально возможными, а затем разрабатывали алгоритмы, в которых каждая из них зависела как можно меньшим количеством данных, с минимальной связью между алгоритмами?
Я чувствую очень Java-esque FactoryFactoryFactory мыслей здесь - мы хотим иметь множество представлений, несколько моделей, множество степеней свободы повсюду. Это почти так, что это движущая сила MVC и MVP и еще много чего. Теперь позвольте мне спросить: как часто вы платите за это (и определенно ли стоит стоимость)?
Я также не вижу обсуждения того, как эффективно управлять состоянием между HTTP-запросами. Разве мы не узнали от функциональных людей (и объемных ошибок, сделанных императивными спагетти), что состояние является злым и должно быть сведено к минимуму (и когда оно используется, должно быть хорошо понято)?
Я вижу много использование терминов MVC и MVP без значительных доказательств того, что люди критически относятся к ним. Ясно, что проблема заключается в «их», мне или обоим ...
Каждый из них адресует разные проблемы и может даже быть объединен вместе, чтобы иметь что-то вроде ниже
[/g1]
. Также имеется полное сравнение MVC, MVP и MVVM здесь
Это это приятное видео от дяди Боба, где он кратко объясняет MVC & amp; MVP в конце.
IMO, MVP - это улучшенная версия MVC, в которой вы в основном отделяете внимание от того, что вы собираетесь показать (данные) из того, как вы собираетесь показывать (представление). Презентатор включает в себя любопытную бизнес-логику вашего пользовательского интерфейса, неявно налагает, какие данные должны быть представлены, и дает вам список немого вида. И когда придет время показать данные, вы просто подключите свое представление (возможно, включает в себя те же идентификаторы) в свой адаптер и установите соответствующие поля просмотра, используя эти модели просмотра с минимальным количеством вводимого кода (просто используя сеттеры). Главное преимущество заключается в том, что вы можете протестировать свою бизнес-логику пользовательского интерфейса против множества / разных видов, например, показывать элементы в горизонтальном списке или вертикальном списке.
В MVC мы говорим через интерфейсы (границы), чтобы склеить разные слои. Контроллер является плагином для нашей архитектуры, но у него нет такого ограничения, чтобы навязывать, что показывать. В этом смысле MVP является своего рода MVC с концепцией представлений, которые могут быть подключены к контроллеру через адаптеры.
Надеюсь, это поможет лучше.