Rozdíly mezi MVC a MVP rubrika: Programování: Jiné
Na základě komentářové diskuse k otázce Struktura PHP MVC projektu jsem založil novou otázku aby diskuse nezapadla.
Jak chápete rozdíly mezi vzory MVC a MVP. Seriál o prezentačních vzorech lze najít na http://www.zdrojak.cz/serialy/mvc-a-dalsi-prezentacni-vzory/. Bohužel spoustě lidem vzory MVC a MVP splývají a je těžké definovat hranice.
Tak sem s Vašimi návrhy a postřehy. Případně jaké další návrhové vzory používáte místo MVC/MVP a proč.
MVC je asi relativne jasne:
- Model jsou data a logika pro jejich ziskani a manipulaci. V idealnim pripade Controller zavola nejakou Model akci, a ten o vysledcich uvedomi View.
- View uzivateli zobrazuje data z Modelu; dava vedet Controlleru, ze uzivatel neco chce.
- Controller manipuluje s Modelem, vysledkem cehoz byva nejake View (ktere vytvari vetsinou ten Controller a jen mu preda Model), na kterem uzivatel uvidi vysledek te manipulace.
Uzivatelske akce musi nejaky Router poslat na spravny Controller, ktery pak resi vysledne View. I proto je to ale v podstate idealni pro web - server si nemusi drzet moc stavu, routovani umime pres HTTP "zadarmo".
Naproti tomu v MVP:
- Model jsou data a souvisejici logika, ale nikoho nijak nenotifikuje. (V MS terminologii to je varianta "Passive View". Druha varianta, "Supervising Controller", je IMHO MVC)
- View zobrazuje data, ktera mu da Presenter (tady zmena, zadne bindovani na Model), a deleguje na Presenter uzivatelske akce.
- Presenter manipuluje s Modelem, ale zaroven se stara o "nakrmeni" View daty.
Protoze se akce nijak neroutuji (View vola svuj Presenter, Presenter vola svoje View), udrzuje se hierarchie Presenteru - takze zmenu View v dusledku resi parent Presenter.
Ja jako vic desktopovy nez webovy vyvojar, navic primarne pro .NET, jsem delal nejvic s MVVM (ve WPF):
- Model je stejny jako v MVP, cili data a nejaka logika
- View zobrazuje data, ktera si nabindoval z ViewModelu. Zaroven ViewModelu deleguje uzivatelske akce.
- ViewModel podobne jako Presenter manipuluje s Modelem, ale misto cpani dat modelu mu je nabizi na binding a jako Model v MVC notifikuje View o zmenach. Binding resi jak data, tak commandy, takze castecne ten Binder (ve WPF automagicky a docela mocny) zastupuje funkce Presenteru a Controlleru, takze na samotny ViewModel toho moc nezbyva.
Podobne jako v MVP je potreba drzet hierarchii ViewModelu, aby mohl parent ViewModel resit prepinani Views.
Pro zobrazení všech 5 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře