MVP və MVC nədir və fərq nədir?

Çox vasitə təşviq edən istifadəçi interfeyslərini yaratmaq üçün RAD (drag-drop və konfiqurasiya) baxırsınızsa, ehtimal ki, üç Design -View-Controller , Model-View-PresenterModel-View-ViewModel dizayn nümunələrinə rast gəlinəcəksiniz . Mənim sualım üç hissədən ibarətdir:

  • Bu nümunələrə hansı problemlər təsir edir?
  • Necə görünürlər?
  • Necə onlar fərqlidir?
1929
05 авг. Mike Minutillo tərəfindən təyin olunan 05 Avqust. 2008-08-05 13:06 '08 at 13:06 pm 2008-08-05 13:06
@ 27 cavab

Model-baxış-təqdimatçısı

MVP Presenter, təqdimat üçün istifadəçi interfeyinin iş mantığını ehtiva edir. Baxışdan gələn bütün zənglər birbaşa Təqdimatçıya verilir. Təqdimatçı ayrıca təqdimatdan birbaşa ayrılır və interfeys vasitəsilə ünsiyyət qurur. Bu, vahid testində növlərin istehza edilməsinə imkan verəcək. MVP-nin ümumi xüsusiyyətlərindən biri də iki yollu yolla göndərilməsinin çox olmasıdır. Məsələn, kimsə Save düyməsini basdıqda, hadisə işləyicisi Presenter "OnSave" üsulunu təqdim edir. Saxlama tamamlandıqdan sonra, təqdimatçının təqdimatı interfeysi vasitəsilə təqdim etməyi təmin edəcək ki, təqdimat qənaətin tam olduğunu göstərə bilər.

MVP, web formasında ayrı bir təqdimata nail olmaq üçün çox təbiidir. Bunun səbəbi görünüşün ASP.NET işləməsinin ilk dəfə yaradıldığıdır. Hər iki variant haqqında daha çox məlumat əldə edə bilərsiniz.

İki əsas variant

Pasif baxım: görünüş mümkün qədər axmaqdır və demək olar ki, sıfır mantığa malikdir. Moderator alaq və modellə danışan vasitədir. Görünüş və Model bir-birindən tamamilə qorunur. Model, hadisələri tetikleyebilir, lakin konuşmacı sunumu güncellenmek üçün onlara abunə olur. Pasif tarama zamanı birbaşa məlumatların bağlanması yoxdur, əksinə, Presenter məlumatın təyin edilməsi üçün istifadə edən təyinat xüsusiyyətlərini təmin edir. Bütün dövlət Presenterdə yox, Baxış deyil.

  • Pro: maksimum səth testetiliyi; aydın görünüş və model ayrılması
  • Con: daha çox iş (bütün yükləyici xüsusiyyətləri kimi), çünki bütün məlumatların özünüzü özünüzə qoyun.

Nəzarətçi nəzarət . Usta istifadəçinin hərəkətlərini idarə edir. Görünüş birbaşa məlumat bağlama yolu ilə modelə bağlıdır. Bu vəziyyətdə, bu təqdimatçının vəzifəsi modellə ünsiyyət qurmaq üçün görünüşü köçürür. Təqdimatçı da bir düyməni basaraq, naviqasiya və s. Kimi hərəkətlər üçün məntiq ehtiva edəcək.

  • Pro: data məcburi istifadə edərək kodun miqdarı azalır.
  • Eksiler: daha az test səthi (məlumatların bağlanması səbəbindən) və görünüşdə daha az encapsulasiya var, çünki bu model birbaşa istinad edir.

Model-baxış-nəzarətçi

MVC-də nəzarətçi tətbiqin yükləndiyi zaman daxil olmaqla, hər hansı bir hərəkətə cavab olaraq görünməsini müəyyənləşdirməkdən məsuliyyət daşıyır. Bu MVP-dən fərqlidir, burada tədbirlər aparıcıya təqdimat vasitəsilə göndərilir. MVC-də, hər bir fəaliyyət görünüşdə nəzarətçi zəng və bir hərəkət ilə əlaqələndirilir. Bir şəbəkədə, hər bir hərəkət cavab verən bir nəzarətçi olan digər tərəfdən bir URL-ə daxildir. Bu Controller işlədikdən sonra düzgün görünüşü qaytaracaqdır. Ardıcıllıq tətbiqin ömrü boyu bu şəkildə davam edir:

 Görünüşdə hərəkət -> Nəzarətçiyə çağırın -> Controller Logic -> Controller View-i qaytarır.

MVC-dən başqa böyük fərq, görünüşün modellə birbaşa əlaqələndirilməməsidir. Görünüşü sadəcə görselleştirilmiş və heç bir dövləti yoxdur. MVC tətbiqlərində, arxasında arxasında heç bir məntiq yoxdur. Bu, MVP-yə zidddir, burada tamamilə vacibdir, çünki Görünüş Təqdimatçıya ötürülməsə, heç vaxt çağırılmayacaqdır.

Təqdimat modeli

Diqqətə layiq olan başqa bir şablon təqdimat modeli . Bu şablonda təqdimatçı yoxdur. Bunun əvəzinə, görünüşü birbaşa görünüş modeli ilə əlaqələndirilir. Təqdimat modeli, baxış üçün xüsusilə yaradılmış bir modeldir. Bu, bu modelin, domen modelinə heç vaxt əlavə edilməyəcək xüsusiyyətləri ortaya çıxardı, çünki bu, problemlərin ayrılmasının pozulması olacaq. Bu halda görünüş modeli domen modeli ilə əlaqələndirilir və bu modeldən gələn hadisələrə abunə ola bilər. Təqdimat sonra təqdimat modelindən hadisələrə abunə olunub və müvafiq olaraq yenilənir. Görünüş modeli, görünüşlərin hərəkətləri çağırmaq üçün istifadə etdiyi əmrləri təmin edə bilər. Bu yanaşmanın üstünlüyü, Baş nazirin tam görünüş davranışını tamamilə əhatə etdiyindən, əsaslandırılmış kodun tamamilə aradan qaldırılmasını təmin etməkdir. Bu şablon WPF proqramlarında istifadə üçün çox güclü bir namizəddir və Model-View-ViewModel də adlanır.

MSDN, görünüş modeliWPF Kompozit Başvuru Kılavuzu (keçmiş Prizma) haqqında xüsusi bir təqdimat şablonları haqqında bir məqaləyə malikdir .

1866
19 сент. Cavab Glenn Block 19 sep tərəfindən verilir . 2008-09-19 15:46 '08 at 3:46 pm 2008-09-19 15:46

Bu barədə bir müddət əvvəl yazdım, Todd Snyder, bu ikisinin arasındakı fərqdə böyük bir yazı əlavə edərək:

Şablonlar arasında əsas fərqlər aşağıdakılardır:

MVP naxışları

  • Bu növ model ilə daha güzəştli əlaqəlidir. Modelin görünüşü birləşdirən məsul şəxs.
  • Daha asan vahid testi, təqdimat ilə qarşılıqlı interfeys vasitəsilə həyata keçirildiyi üçün
  • Ümumiyyətlə xəritə təqdimatçını bir-birinə keçirir. Kompleks təqdimatlar bir neçə təqdimatçı ola bilər.

MVC naxışları

  • Nəzarətçi davranışa əsaslanan və paylaşılan fikirlər ola bilər.
  • Görünüşün görünməsini müəyyənləşdirmək üçün məsuliyyət daşıyır
border=0

Bu internetdə mənim tapa biləcəyim ən yaxşı izahatdır.

395
05 авг. Jon Limjap tərəfindən verilmiş cavab 05 avqu. 2008-08-05 13:21 '08 saat 01:21 'da 2008-08-05 13:21

Bu, bu dizayn nümunələrinin bir çox variantlarının sadələşdirilməsidir, amma bu mənim aramdakı fərqlər barədə düşünmək istəyirəm.

MVC

2019

389
07 июля '13 в 1:18 2013-07-07 01:18 cavab Phyxx -ə 07 iyul 2013 - il tarixində, 1:18 2013-07-07 01:18 tarixində verilir

Burada ünsiyyət axını əks etdirən illüstrasiyalar var.

2019

225
12 сент. Ashraf Bəşir tərəfindən verilmiş cavab 12 sentyabr 2014-09-12 23:47 '14 saat 23:47 2014-09-12 23:47

MVP, məsuliyyətin məsuliyyət daşıdığı zaman mütləq bir ssenari deyil (məsələn, Taliban MVP-ə baxın).
Çox təəssüf edirəm ki, insanlar hələ də şablon kimi təbliğ edirlər ("Təqdimatda təqdimat"), çünki bu "Bu yalnız bir təqdimat" (Pragmatik Programcı) ilə ziddiyyət təşkil edir. "Bu, sadə bir görünüşdür", istifadəçiyə göstərilən son görünüşün tətbiqin ikinci məqsədi olduğunu bildirir. Microsoft MVP nişanı Görünüşləri təkrar istifadə etmək üçün çətinləşdirir və Microsoft dizaynerini zəif təcrübəni təşviq etməkdən sərbəst buraxır.

Mükəmməl səmimi olmağım üçün MVC-nin əsas problemləri MVP-nin istifadəsi üçün etibarlıdır və fərqlər demək olar ki tamamilə semantikdir. Görünüş (məlumatları göstərən), nəzarətçi (istifadəçi qarşılıqlı fəaliyyətini başlatan və nəzarət edən) və model (əsas məlumatlar və / və ya xidmətlər) arasında maraqların bölüşdürülməsinə baxmayaraq, MVC faydaları alırsınız. Əgər fayda əldə etsəniz, , MVC, MVP və ya Gözetleme Denetleyicisi deseniniz mi? Yalnız real nümunə MVC olaraq qalır, qalanları yalnız fərqli ətirlərdir.

Bu fərqli tətbiqlərin bir sıra detallarını əks etdirən son dərəcə maraqlı məqaləni nəzərdən keçirin. Gördüyünüz kimi, hamısı əsasən eyni şeyi edirlər, amma bir az fərqlənirlər.

Şəxsən mən MVP yaxın zamanda yaxın bir zamanda MVC-nin olub-olmadığını və ya Microsoft-un sürətli proqram inkişaf etdirmə vasitələrini haqlı olaraq təsdiqləyən semantik fanatiklər arasındakı mübahisələri aradan qaldırmaq üçün cəlbedici bir müddət kimi düşündüyünü düşünürəm. Kitablarımdakı bu səbəblərdən heç biri ayrı-ayrı dizayn modeli olaraq varlığını doğruldur.

153
26 авг. Cavab Quibblesome 26 aug verilir . 2008-08-26 00:22 '08 at 0:22 2008-08-26 00:22

MVP: təqdim cavab verir.

Çox hallarda, təqdimat təqdimat yaradır. Moderator modeli ilə qarşılıqlı əlaqə quraraq təqdimatı manipulyasiya edəcək. Təqdimat bəzən aparıcı ilə qarşılıqlı əlaqədə olur, adətən bir interfeys. Bu həyata keçirilir; Təqdimatın təqdimatçının üsullarını çağırmasını istəyirsinizmi və ya təqdimatın təqdim edənin dinlədiyi hadisələrə sahib olmasını istəyirsiniz? Bu, aşağı düşür: görünüşü rəhbərlik haqqında bilir. Deleqlərin təqdimatı.

MVC: nəzarətçi cavab verir.

Bir nəzarətçi bir hadisə / tələb əsasında yaradılır və ya açılır. Nəzarətçi daha sonra görünüşü daha da uyğunlaşdırmaq üçün müvafiq görünüş yaradır və model ilə qarşılıqlı əlaqə yaradır. Bu aşağı gəlir: nəzarətçi görünüşü yaradır və idarə edir; təqdimat nəzarətçisinə tabedir. Görünüşü nəzarətçi haqqında bilmir.

95
07 авг. Brian Leahy tərəfindən verilmiş cavab Aug 07 2008-08-07 01:51 '08 at 01:51 2008-08-07 01:51
20 дек. Cavab AVI 20 Dekabr. 2015-12-20 05:10 '15 at 5:10 AM 2015-12-20 05:10
  • MVP = Model-Göstərici
  • MVC = Model-View-Controller

    • Həm təqdimat şablonları. Onlar model (domen obyektlərini düşünün), ekran / veb səhifə (görünüş) və istifadəçi interfeysi necə işləməlidir (Presenter / Controller)
    • Konsepsiyada olduqca bənzərdir, insanlar Təqdimatçı / Kontrolörün dadına görə fərqlənirlər.
    • Burada fərqlər haqqında böyük məqalə. Xüsusən, MVC modelində görünüşü yeniləyən bir model var.
33
05 авг. Cavab Brett Veenstra 05 avqustda verilir. 2008-08-05 13:22 '08 at 13:22 pm 2008-08-05 13:22

MVP-nin digər növləri də mövcud olduğunu xatırlamaq lazımdır. Fowler modelini pozdu - passiv və nəzarətçi nəzarətçi.

Pasif bir görünüşü istifadə edərkən, görünüşünüz, adətən, istifadəçi interfeysi alt sinifinə birbaşa və ya daha az xassələri təsvir edən ince dənəli bir interfeys tətbiq edir. Məsələn, adı və ünvanı kimi xassələrlə bir ICustomerView ola bilər.

Tətbiqiniz bu kimi bir şeyə baxa bilər:

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

Presenter sinifiniz modellə danışacaq və təqdimatla "uyğun" olacaq. Bu yanaşma "Pasif baxım" adlanır. Üstünlük, gözdən keçirmək asandır və istifadəçi interfeysi platformaları (Web, Windows / XAML, və s.) Arasında gezinməyi asanlaşdırır. Dezavantajı, data bağlama kimi şeylərdən istifadə edə bilməməsidir (bu, WPFSilverlight kimi çərçivələrdə həqiqətən effektivdir).

MVP-nin ikinci dadı Controlling Controller'dir. Bu halda, Görünüşünüz Müştəri mülkiyyətinə malik ola bilər, sonra isə istifadəçi interfeysi widget'larına qoşulur. Sinxronizasiya və görünüşlü mikrokontrolör haqqında düşünməyə ehtiyac yoxdur və Müşahidəçi Dispetçer lazımlı şəkildə daxil ola və kömək edə bilər, məsələn kodlu qarşılıqlı məntiqlə.

MVP-nin üçüncü "zövqü" (və ya bəziləri onu ayrı-ayrı nümunə adlandırdılar) görünüş modeli (bəzən Model-View-ViewModel adlanır). MVP ilə müqayisədə M və P bir sinifə birləşirsiniz. Sizin istifadəçi interfeysi məlumatlarınızın əlavə olunduğu müştərinizin bir obyekti var, ancaq "IsButtonEnabled" və ya "IsReadOnly" və s. Kimi əlavə istifadəçi interfeysi sahələriniz var.

Hesab edirəm ki, UI üçün tapdığım ən yaxşı resurs Jeremy Miller tərəfindən öz CAB Mündəricatının Bütcəsi üzrə bir sıra blog yazılarıdır. O, MVP-nin bütün zövqlərini nəzərdən keçirdi və onları tətbiq etmək üçün C # kodunu göstərdi.

Modelin-View-ViewModel şablonu haqqında, həmçinin, YouCard-da Silverlight kontekstində yazdım: ViewModel şablonunun tətbiqi .

31
08 авг. Jonas Follesø tərəfindən verilmiş cavabı 08 Av 2008-08-08 08:55 '08 at 08:55 2008-08-08 08:55

Bu suala bir çox cavab var, lakin mən bu iki sualları açıq şəkildə müqayisə edən həqiqətən sadə bir cavab lazım idi. Bir istifadəçi, MVP və MVC tətbiqində bir film adı axtararkən mən gəldiyim bir müzakirə.

İstifadəçi: Tıklayın, basın ...

Görünüş: kimdir? [ MVP | MVC ]

İstifadəçi: Mən yalnız axtarış düyməsini tıkladım ...

Tərif: Tamam, ikinci gözləyin ... [ MVP | MVC ]

(Çağırıcının çağırış növü | Controller ...) [ MVP | MVC ]

Görünüş: Hey Presenter | Controller, istifadəçi yalnız axtarış düyməsini tıkladı, mən nə etməliyəm? [ MVP | MVC ]

Öndər | Kontrolör: Salam, görünüş, bu səhifədə bir axtarış sorğusu var? [ MVP | MVC ]

Baxın: Bəli, burada ... "piano" [ MVP | MVC ]

Host: Təşəkkür edirik, gözdən keçirirəm ... model axtarış sorğusunu ararken, ona göstərilən proses göstəricisini göstərin. [ MVP | MVC ]

(Qurğuşun | Controller modeli çağırır ...) [ MVP | MVC ]

Öndər | Controller: Hey, model, bu axtarış sorğusunda bir matç var: "piano" [ MVP | MVC ]

Model: Hey Qurğuşun | Nəzarətçi, məni yoxlayın ... [ MVP | MVC ]

(Model, film veritabanına sorğu verir ...) [ MVP | MVC ]

(Bir müddətdən sonra ...)

-------------- Bu, MVP və MVC-nin fərqlənməyə başladığı yerdir ---------------

Model: Mən sizin üçün bir siyahısını tapdım, burada JSON formatında "[{" ad ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} "[ MVP ]

Model: Bir nəticə var, Controller. Mənim surətimdə bir sahə dəyişən yaratdım və nəticə ilə doldurdum. Bu ad "searchResultsList" [ MVC ]

(Host | Controller Modelə təşəkkür edir və Görünüşü qaytarır) [ MVP | MVC ]

Host: View üçün gözlədiyiniz üçün təşəkkür etdiyiniz üçün sizin üçün uyğun nəticələr siyahısını tapdım və onları hazırlanmış formatda təşkil etdim: ["Piano Teacher 2001", "Piano 1993"]. Dikey siyahıda istifadəçiyə göstərin. Ayrıca, ilerleme çubuğunu [ MVP ] saxla.

Controller: Görməyə gözlədiyiniz üçün təşəkkür etdiniz, axtarış sorgunuzla bağlı modeldən soruşdum. O, uyğun nəticələrin siyahısını tapdığını və onların nümunəsində "searchResultsList" adlı bir dəyişənə saxladığını söyləyir. Onu oradan əldə edə bilərsiniz. Həmçinin, indiyədək tərəqqi göstəricisini gizlədin [ MVC ].

View: Çox sağ olun Sağol [ MVP ]

Təqdimat: Təşəkkür edirik [Denetleyici "[ MVC ] (İndi təqdimat özü soruşur: modeldən istifadəçiyə necə nəticələr verə bilərəm? Filmin birinci və ya ötən il olması məcburiyyətindədirmi?) Şaquli və ya üfüqi siyahıda olmalıdırmı? ...)

Maraqlı olduğunuz halda, mən burada bir Github repo ilə müşayiət memarlıq nümunələri ərizə (MVC, MVP, MVVP, təmiz memarlıq, ...) bir sıra məqalələr yazıram. Nümunə Android üçün yazılmış olsa da, əsas prinsiplər hər hansı daşıyıcıya tətbiq edilə bilər.

28
06 апр. Apr 06-da Ali Nem tərəfindən verilmiş cavab 2018-04-06 16:51 '18 at 4:51 pm 2018-06-06 16:51

Model-baxış-nəzarətçi

MVC proqram arxitekturası nümunəsidir. Proqram mantığını üç ayrı hissəyə bölür, modulluğa və əməkdaşlıq rahatlığına və təkrar istifadə etməyə kömək edir. Bundan əlavə, tətbiqləri daha çox çevik və yinelemelerle dostluq edir. Ərizəni aşağıdakı komponentlərə ayırır:

  • Məlumatların emalı və biznes məntiqinə dair modellər
  • İstifadəçi interfeysi və tətbiqi emal üçün nəzarətçilər
  • GUI obyektləri və baxışlarını idarə etmək üçün baxışlar

Bunu bir az daha başa düşmək üçün, sadə bir alış-veriş siyahısı tətbiqini təsəvvür edin. İhtiyacımız olan hər şey, bu həftə satın almaq üçün lazım olan hər bir məhsulun adlarının, miqdarının və qiymətlərinin siyahısıdır. Aşağıda biz MVC-dən istifadə edərək, bu funksiyalardan bəzilərini necə tətbiq edə biləcəyimizi təsvir edirik.

2019

ответ дан Rahul 29 нояб. '17 в 13:14 2017-11-29 13:14

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

18
ответ дан Derek Greer 21 окт. '09 в 3:49 2009-10-21 03:49

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

Здесь обсуждается относительно различий между MVC и MVP.

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

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

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

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

17
ответ дан Matt Mitchell 05 авг. '08 в 13:20 2008-08-05 13:20

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

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

16
ответ дан Xiaoguo Ge 13 марта '17 в 8:54 2017-03-13 08:54

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

Архитектурно, MVP - это подход на основе Page Controller, где MVC - подход на основе Front Controller. Это означает, что в стандартном веб-формате MVP жизненный цикл страницы просто усиливается путем извлечения бизнес-логики из кода позади. Другими словами, страница является одним из обслуживающих HTTP-запросов. Другими словами, MVP IMHO является эволюционным типом расширения веб-формы. 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

13
ответ дан Nikola Malovic 21 сент. '08 в 15:32 2008-09-21 15:32

В 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>

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

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

9
ответ дан Shubham Sharma 02 июля '16 в 10:15 2016-07-02 10:15

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

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

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

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

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

9
ответ дан Pedro Santos 02 янв. '09 в 13:35 2009-01-02 13:35

Вы можете найти ответы на этот вопрос: " Внедрение MVC с помощью Windows Forms " полезно, поскольку они говорят о различных вариантах при реализации MVC и MVP.

8
ответ дан Ian Ringrose 21 авг. '09 в 11:51 2009-08-21 11:51

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

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

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

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

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

8
ответ дан Luke Breuer 29 янв. '09 в 0:11 2009-01-29 00:11

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

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

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

В этих рамках пользовательский интерфейс /HTML 5/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.

7
ответ дан James Roeiter 08 июня '13 в 0:16 2013-06-08 00:16

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

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

6
ответ дан Hibou57 20 февр. '13 в 19:55 2013-02-20 19:55

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

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

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

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

2
ответ дан zgulser 26 янв. '18 в 0:24 2018-01-26 00:24

Существует много версий MVC, этот ответ касается исходного MVC в Smalltalk. Вкратце, это 2019

ответ дан onmyway133 09 сент. '15 в 5:34 2015-09-09 05:34

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

0
ответ дан Clive Jefferies 16 нояб. '17 в 20:32 2017-11-16 20:32

MVP

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

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

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

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

Плюсы: В представлении есть только UI, а не какие-либо логики Высокий уровень тестируемости

Минусы: Бит сложный и более эффективный при реализации привязок событий

MVC

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

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

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

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

0
ответ дан marvelTracker 12 янв. '16 в 7:50 2016-01-12 07:50

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

  1. Нажата одна гиперссылка, и клиент отправляет на сервер один запрос. Сервер отвечает на этот запрос ответом, отправляя объектную модель клиенту (известную просто как "ответ").
  2. Сервер отвечает, отправляя объектную модель (файл HTML) на клиентский компьютер (известный как полное рукопожатие).
  3. Обозреватель клиентов теперь может визуализировать "представление" путем синтаксического анализа, лексизации/токенизации и преобразования этой разметки объектной модели в "представление" графического интерфейса.

Возможно, я сейчас на пенсии, но, черт возьми, вы, ребята, здесь спорите и обсуждаете полную чушь. И, честно говоря, независимо от того, что вы называете Рукопожатием между двумя машинами, не может быть ничего кроме одного Запроса, одного Ответа Объекта "Модель" и, наконец, Обозревателя клиентов, отображающего "Представление".

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

"Сервер" не является "Контроллером", он является "Направителем" и направляет Ответ только путем отправки ответа "Модель" объекта. Клиентский браузер (который может быть вероятным контроллером) затем создает "представление" из объектной "модели", к которой сервер не имеет никакого отношения. Ваш компьютерный язык не может ни войти в объект модели, ни делегировать его. Все это - Создатель Разметки.

Весь этот беспорядок - это просто "Контроллер" на стороне клиента, который анализирует "Модель", чтобы отобразить "Вид" или CMV или MCV (отправленный как Модель в первом порядке), и вы не можете его изменить. Но это можно назвать просто запросом, объектной моделью ответа и представлением рендеринга или RRMV.

-1
ответ дан rodeone2 31 дек. '19 в 5:10 2018-12-31 05:10

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

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

MVC View = просмотр и презентатор MVP

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

Дополнительная информация относится к этому http://includeblogh.blogspot.com.eg/2016/07/the-difference-and-relationship-between.html

-2
ответ дан AhmedNTS 31 июля '17 в 13:13 2017-07-31 13:13

Другие вопросы по меткам или Задайте вопрос