MVC (Model View Controller)
- definovan v 80tych letech pro potreby smalltalku (vse je objekt)
- resi jak zobrazit a ziskat data od uzivatele a zaroven umoznit vice ruznych/stejnych obrazovek nad stejnymi daty, to vse s okamzitou odezvou (zmena jedne obrazovce vede ke zmene na ostatnich)
- deli odpovednosti na Model, View a Controller
- Model (data + metody pro upravu) musi prijimat listenery a davat vedet o tom, ze se zmenil. Ve smalltalku to muze byt cokoliv - klidne i trida, retezec, blok kodu (vse je objekt, kazdy objekt dava vedet o zmene)
- View resi pouze samotne zobrazeni modelu a posloucha jeho zmeny a okamzite reaguje prekreslenim aktualnich dat
- Controller stara se o poskladani jednoho nebo vice view, chytani udalosti od uzivatele a prislusnou upravu modelu, muze view zrusit, nahradit ho jinym nebo pridavat dynamicky dalsi, muze take otevirat dalsi obrazovky (a predavat slovo jinemu MVC).
- MVC lze pouzit i na webu, ale vetsinou se s nim nesetkavame - casto je mylne zamenovan za Model2 (Kohana, Ruby on Rails, a dalsi), nejblize k MVC na webu ma Google Web Toolkit
Model2 (zname jako MVC2, MVC Model 2, slangem "MVC pro Web")
- resi UI na webu (bez-stavovy http protokol)
- opet mame odpovednosti rozdelene na Model, View i Controller
- View se opet stara zobrazeni dat, ale uz neposloucha zmeny a neprekresluje se, jako view vetsinou vystupuje sablona (ne soubor, ale objekt), ktera prijima data a vraci retezec
- Model jsou opet data, ale tentokrat neni potreba, aby davala vedet o zmene, timpadem to muze byt cokoliv uplne ve vsech jazycich
- Controller opet sklada jedno nebo vice view dohromady a opet osetruje uzivatelsky vstup, ikdyz tentokrat neposloucha, ale jenom bere surova data z requestu. opet podle obdrzenych dat provede prislusne akce na modelu. tentokrat je ale take zodpovedny o zavolani view - tzn. o vykresleni odpovedi: vetsinou view -> render nebo view -> renderOn ( responseWriter )
MVC+Model2
ani jeden z techto dvou vzoru vam negarantuje, ze budete mit lehce-rozsiritelnou aplikaci, je rozdil, pokud view primo zobrazuje jednotlive atributy modelu, a kdyz view umi zobrazit model pouzitim napriklad meta-informaci (a timpadem neni treba pri uprave modelu upravit i view)
------------------------------
Command
- reprezentuje budouci (nebo jiz probehlou) akci na nejakem objektu vcetne samotne instance a vsech potrebnych parametru pro danou akci
- pomaha oddelit odesilatele akce a jeho prijemce - odesilatel musi znat rozhranni commandu, ale nemusi znat rozhranni prijemce
- akce muze byt implementovana primo na commandu a nebo muze jenom volat metodu.
- jeho instance se ziskava typicky z objektu, na kterem chceme zavolat metodu
- instanci muzeme predavat napric aplikaci, upravovat parametry dane akce, a az sme hotovi, tak jenom akci zavolame pomoci execute()
- hodi se napriklad pro historii, rpc a nebo pro logovani
- velmi casto se plete s navrhovym vzorem strategy
Strategy
- reprezentuje konkretni implementaci urciteho druhu algoritmu/funkce
- napriklad matematicka operace nad 2ma cisly - evaluate(left,right): mame levou a pravou stranu a vysledek; scitani, odecitani, nasobeni, deleni jsou potom implementace
- strategii neziskavame (rozhodne by nemela putovat napric aplikaci), ale nastavujeme (injectujeme) do objektu - a to bud do metody a nebo rovnou do instance tridy.
- strategie neni vzdy trida - muze to byt patricne nakonfigurovana instance tridy a nebo closura/lambda funkce
TODO: HMVC, ApplicationModel, MVP, Singleton, Factory, Factory Method, Dependency Injection a dalsi...
diskuzi se nebranim, ale berte navedomi, ze pokud se k necemu dobereme, tak to promazu (a pripadne upravim hlavni prispevek), aby to zbytecne nematlo novacky...



