Komunitní web pro každé město
Zobrazují se odpovědi 1 až 8 z 8

Návrhové vzory

  1. 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...
    Naposledy upravil vedouci : 06.02.2011 v 13:21

  2. Co se právě děje na Webtrhu?
  3. Dependency injection (jakožto podtyp inversion of control) spadá spíše do architektonickejch vzorů...

  4. pridal jsem strategy a command...

    @malejpavouk: inversion of control tam spada, dependency injection je tak trosku na rozcesti - deli se totiz na nekolik primych navrhovych vzoru: constructor, setter, interface, metadata+private injection, kde ten posledni jmenovany snad ani neni pattern (a urcite je jich vic)

  5. Jsem tu novy a jeste mi uplne nedoslo jaky je cil toho tema. pokud timto snazite se dat nejaky lepsi model programovani aby programovane aplikace byli lepe rozsirovatelne, pak mel bych jeden navrh.

  6. Citace Původně odeslal buymedia Zobrazit příspěvek
    Jsem tu novy a jeste mi uplne nedoslo jaky je cil toho tema. pokud timto snazite se dat nejaky lepsi model programovani aby programovane aplikace byli lepe rozsirovatelne, pak mel bych jeden navrh.
    v tomto tematu se resi existujici, overene a optimalizovane navrhove vzory... vedouci je tu proste popisuje pro zacatecniky :) nekomu se muze hodit

  7. Doporučoval bych uvádět alespoň příklady, nahrubo pro nějakou velice jednoduchou aplikaci daného vzoru (nebo odkázat na externí zdroje). Kdekdo kolem mě "používá" MVC (či Model2), ale v těch nejlepších případech to většinou končí jen u toho Model a View. Controller se tak nějak ztráci.
    K MVC doporučuji pročíst http://csis.pace.edu/~bergin/mvc/mvcgui.html. Sice je to v Javě, ale člověk si udělá jasnou představu o tom k čemu je to dobré a jak se to dá implementovat.

  8. Hlavni zamer bylo ulevit mym nervum - kdyz nekdo rika, ze napsal aplikaci v PHP MVC frameworku, opravim ho, ze pravdepodobne mluvi o Model2 a nasleduje uplne zbytecna debata o tom, jaky je v tom rozdil. A uplne nejvic nechapu, proc nekdo vubec tlaci MVC, kdyz jedine o co mu jde, je oddeleni prezentacni a business logiky (ktere je vetsinou taky zbytecne, pokud objekt jenom provolava na UI knihovnu a nevraci primo HTML)

    Stejne tak jsem chtel casem psat i o ostatnich patternech a principech, ale nejak na to neni cas - a pokud ho budu mit, tak to asi uz rovnou napisu v anglictine.

    Tzn. ted uz je to vlakno asi zbytecne - teda pokud se toho nechce nekdo ujmout misto me...

  9. navrhuji nasledujici model:
    • config - konfigurace vasi aplikaci
    • urlmapping - smerovani veskerych dotazu na urcity controller a jeho funkci
    • filters - filtr, ktery se spousti bud na zacatku nebo na koci programu, nebo jenom u urcitych kontrolleru.
    • controllers - moduly vasi aplikaci. umoznuje snadno rozsirovat vasi aplikaci.
    • services - obecne funkce, ktere se pouzivaji v programu. Ktery ze scriptu se pouziva, definuje se v controlleru.
    • views - treba smarty templates. nezapomente na layouty. Ktery z sablonu se pouzije, definuje se v kontrolleru
    • taglib - funkce , ktere generuje urcity HTML kod, pro zobrazeni urcitych elementu nebo skupiny elementu. jako na priklad select, radio a pod.
    • i18n - jazykove soubory. pro multilingualni weby
    • lib - pluginy nebo classy, ktere pouzivate pro vasi aplikaci
    • web-app - verejne web soubory. naps. web-app/css/ , web-app/js/, web-app/images/, web-app/download/ apod.

Hostujeme u Server powered by TELE3