MVC pro začátečníky I.díl
Model-View-Controller je v poslední době jedno z nejzmiňovanějších řešení pro programování webových aplikací. Když se o tom chcete něco víc dozvědět, narazíte na plno článků. Prokousat se hromadou odborných výroků je však těžší než samotný princip MVC pochopit. V tomto seriále se proto podíváme na to co to MVC je, jak ho využít a zodpovíme si některé nejčastější dotazy.
Co to je MVC jeho základní principy
Pokud jste o MVC nikdy neslyšeli, tato kapitola vám pomůže osvětlit alespoň základy. MVC rozděluje každou aplikaci na 3 samostatné části – model, view a controller (odtud zkratka MVC). Hlavním účelem je strukturovat aplikaci tak, aby ji bylo možné rozdělit na dvě části – front end (to co vidí uživatel) a back end (logika v pozadí, kterou uživatel nevidí). V ideálním případě tak může na projektu pracovat více lidí bez toho, aby si do svých děl vzájemně zasahovali. Vše pochopíte lépe, jakmile zjistíte co je jednotlivými složkami MVC vzoru.
Controller
Controllery (řídící funkce) jsou základními součástmi programu. V podstatě na základě nějakého podnětu určují, co se má dále udělat. Oním podmětem obvykle bývá URI (adresa) zadaná do prohlížeče. Představme si, že přistupujeme na stránku stranka.cz/clanky/nejnovejsi. Controller se podívá na adresu a vidí, že první část URI obsahuje slovo „clanky“. Proto zavolá řídící funkci – controller, který je zodpovědný za zpracování článků. Na základě dalších parametrů, které jsou controlleru předány (v tomto případě například slovíčko „nejnovejsi“) se pak rozhodne, co bude dělat. Ve většině případů rozhodne o tom co se má na stránce zobrazit. Až na výjimky bývá kód controllerů velmi krátky a jednoduchý tak, aby se v něm dalo dobře orientovat.
Polopatická verze:
Návštěvník navštíví stránku s adresou stranka.cz/clanky/nejnovejsi. Aplikace zavolá: „Hele, je tady někdo, kdo má na starosti články?“. Odpoví příslušný controller: „Já mám na starosti tuhle rubriku, od teď si to převezmu, díky. Tak, mám tady ještě nějaké další informace? Jo, nejnovější. Takže se musím postarat o zobrazení nejnovějších článků. Hele, databáze! Vytáhni mi nejnovější články! (databáze vytáhne články a data pošle zpět controlleru). Super, data mám, teď už musím stránku jenom zobrazit. Hele, view, zobraz stránku s těmihle daty, co jsem ti teď dal.“
Model
Modely obstarávají všechnu tu těžkou práci – interakce s databází, operace s daty, výpočty a veškerou aplikační logiku. Je to sada funkcí, které obvykle vracejí nějakou hodnotu pro controller. Perfektním příkladem je proces přihlašování. V modelu budeme mít nějakou funkci prihlasit(), která bude přijímat 2 parametry – uživatelské jméno a heslo. Následně provede výběr z databáze, aby ověřil, zda se lze se zadanými údaji přihlásit. Pokud ano, vytvoří session atd. Controlleru pak vrátí hodnotu TRUE nebo FALSE, podle toho, zda se přihlášení povedlo nebo ne. Controller samotný pak bude vypadat velmi čistě, protože místo X řádků kódu to bude řádek pouze jeden.
Polopatická verze:
Controlleru příjde stejný požadavek jako v minulém příkladu (nejnovější články). Zavolá proto na model: „Potřebuju články. Konkrétně ty nejnovější“. Model se pak připojí k databázi, vytáhne si z ní články, seřadí si je a když všechno dokončí, jenom zahouká na controller: „Tak tady to máš, připravené k použití!“.
View
Modely a Controllery jsou jenom sady funkcí bez nějakého HTML kódu. Potřebujeme tedy něco, co nám informace ještě hezky zobrazí. A tím jsou právě views. Jedná se o HTML šablony, do kterých se dosazují data.
Polopatická verze:
Zase si vezmeme ukázkový příklad z dřívějška. Model v tuto chvíli už vrátil data zpět do controlleru. Controller nyní vybere šablonu, kterou má použít pro zobrazení článků. Společně s informací o šabloně pošle do view i data (proměnné), které mají být přístupné – v tomto případě všechny informace o článcích. Ve view je pak možné tyto data zobrazit jako HTML stránku.
FAQ
V tuto chvíli můžete mít alespoň nějaké povědomí o tom co to MVC je. Pravděpodobně ale máte více otázek než odpovědí. Proto se nyní pokusíme odpovědět na některé otázky, které byste mohli mít.
1. Proč bych to měl používat? Vypadá to dost komplikovaně a asi mi to přidá víc práce, než ušetří
Přesně toto jsem si říkal, když jsem začal s MVC aplikacemi poprvé. Nemohl jsem se více mýlit. Vývoj podle MVC je OBROVSKOU časovou úsporou. Představte si, kolik samostatných stránek musíte vytvořit při psaní nové PHP aplikace. Časem se vám vše začne míchat, musíte neustále includovat soubor s detaily k databázi… to vše se může velmi rychle stát chaotickým. S MVC nemusíte nic řešit. O vše se stará Framework. Je tedy možné vytvořit například e-shop jen s použitím 3 PHP stránek. Vše krásně přehledné, udržovatelné a rozšířitelné.
2. Framework? Co to je a proč bych měl používat zase tohle?
Mnozí z vás znají například jQuery – to je Framework pro JavaScript. Významným způsobem zjednodušuje veškeré psaní kódu a dává vám nové možnosti. Přesně to stejné dělají i PHP frameworky. Zjednodušují vám práci – dokáží ušetřit i stovky řádků kódu a dělají vaši práci mnohem efektivnější. Téměř všechny jsou však založené na MVC a proto je pochopení MVC vzoru pro jejich použití klíčové. K samotným frameworkům se dostaneme v druhém díle tohoto seriálu. MVC samotný není framework – je to pouze systém, na kterém jsou frameworky postavené.
3. Proč se to musí dělat právě takhle? Proč nemůžu psát všechno rovnou do controlleru a musím používat modely?
Je to zvyk. Některé frameworky vám to dovolí, ale obecně je lepší držet se standardu. Controllery jsou standardně velmi krátké a co nejpřehlednější a právě v modelech je všechen kód. Není to povinnost, ale zvyk.
4. Je MVC nějak omezené na jazyk nebo platformu?
MVC bylo původně navrženo pro strukturování webových aplikací, ale najdou se i vývojáři, kteří podle tohoto vzoru sestavují desktopové aplikace. MVC tedy není na nic vázané. Existují pro něj frameworky pro PHP (největší využití), Ruby, Node.JS a dokonce i JavaScript.
5. Co všechno potřebuju, abych mohl začít programovat MVC aplikace?
Nutností jsou základní znalosti programovacího jazyka, ve kterém chceme MVC využívat (v tomto seriálu se budeme soustředit výhradně na PHP). Frameworky bývají naprogramované objektově, takže znalost objektově orientovaného programování v PHP je velkou výhodou, ale nikoli nutností, neboť se vše dá naučit za pochodu. Z technických parametrů pak bývá nutností server Apache, MySQL (či PostgreSQL) databáze a PHP 5.3. Všechny hostingové služby by tyto parametry měly bez problémů splňovat.
Co nás čeká dál?
V dalším dílu tohoto seriálu se podíváme na praktické ukázky a úvod k používání PHP frameworku. Můžete čekat i cvičné úlohy a praktické příklady.


už dlouhou dobu jsem rozhodnutý, že se to naučím, jen se mi do toho moc nechtělo, tak teď s tvými články se snad pohnu dál
MVC se opravdu vyplatí. Pro příklad jsi vezmeme takový WordPress. V čem je jeho síla? Je celý postaven na MVC filozofii. Bez MVC to dnes nejde!
WordPress rozhodně nepoužívá MVC architekturu, ten má problém i s použitím tříd. Takže ono to bez MVC jde…
MVC nebylo navrženo pro webové aplikace (některé weby si myslí, že IT je jen web), ale obecně řeší paradigma interakce-data-zobrazeni. Neškodilo by někde ukrást obrázek MVC. Jedná se o to, aby se oddělila práce – odpovědnost. Pak můžete vyměnit view nad stejnými daty, můžete zobrazit stejná data různým způsobem – tabulka, graf… View se stará o zobrazení a předání příkazů uživatele do controlleru.
Vidím to jako jeden z mnoha článků na téma: právě jsem to nastudoval, tak napíšu článek, kterých je sice už spousta a vše je v dokumentaci, ale alespoň budu mít publikační činnost. Jsou ale i lidé, které to baví. Sorry, ale podobné články se moc množí.
MVC je použitý v každé interaktivě a editoru psaném v jakémkoli jazyce.
Presne tak, MVC vubec nevzniklo pro web. Cely princip pochazi ze 70 let a poprve byl pouzit ve SmallTalku. Prave pro vyreseni problemu tvorby GUI desktopovych aplikaci. MVC vzniklo v PARC od XEROXu, jako v te dobe vetsina veci.
Na mikrourovni je MVC pouzito ve vseh desktopech ramcich Nejvic je to videt ve SWINGu od Javy, ale i WinForms ci XAML to pouziva.
Btw. 90% web frameworku i kdyz o sobe tvrdi ze jsou MVC, tak v kontextu webu se nejedna o ciste MVC, ale jeho upravene varianty pro web. Napr. v terminologii Java EE se hovorilo o JSP Model 2 MVC.