Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

4. diel - Úvod do MVC architektúry v Spring Boot

V predchádzajúcej lekcii, Vytvorenie Spring Boot projektu v Jave, sme si pripravili vývojové prostredie pre Spring Boot. Tiež sme prvýkrát spustili náš projekt.

Spring framework je postavený na MVC architektúre. Tá je veľmi obľúbená na webe, hoci pôvodne vznikla na desktopoch. Je súčasťou populárnych webových frameworkov, akými sú okrem Spring Boot napr. Symfony alebo Laravel pre PHP. V dnešnom tutoriále, ktorý bude zameraný viac na teóriu, si predstavíme princípy MVC architektúry. Osobne si bez nej (alebo nejakého podobného modelu) nedokážem predstaviť zložitejší web.

Motivácia

Základnou myšlienkou MVC architektúry je oddelenie logiky od výstupu. Rieši teda problém tzv. "špagetového kódu", kedy máme v jednom súbore (triede) logické operácie a zároveň renderovanie výstupu (HTML kód). Súbor potom napríklad obsahuje databázové otázky, logiku (Java kód) a rôzne pohádzané HTML tagy. Všetko je do seba zamotané ako špagety. Kód sa samozrejme zle udržuje, nieto ešte rozširuje. Je zle highlightovaný, pretože si s ním IDE nevie rady, HTML nie je správne naformátovaný, strácame sa v jeho stromovej štruktúre.

Našim cieľom je, aby zdrojový kód obsahujúci logiku vyzeral ako zdrojový kód v Jave a výstup vyzeral ako HTML stránka s čo najmenšou prímesou ďalšieho kódu. S tým nám pomôže práve MVC architektúra, ktorá rozdeľuje tieto časti na jednotlivé logické komponenty. Tie si teraz postupne vysvetlíme.

Komponenty

Celá aplikácia je rozdelená na komponenty 3 typov, jedná sa o:

  • Modely,
  • View (šablóny či pohľady) a
  • Controllery (kontroléry).

Z toho tiež vychádza názov MVC. Neexistuje žiadna striktná definícia architektúry, a tak sa môžete stretnúť s viacerými výkladmi. My sa zameriame na ten najrozšírenejší.

Poďme si jednotlivé komponenty najprv popísať.

Model

Komponent model z MVC architektúry - Základy Spring Boot frameworku pre Javu

Model obsahuje logiku a všetko, čo do nej spadá. Môžu to byť výpočty, databázové dotazy, validácia a podobne. Pre nás to znamená, že modely sú klasické Java triedy, ako sme ich poznali doteraz. Model vôbec nevie o výstupe. Jeho funkcia spočíva v prijatí parametrov zvonku a vydaní dát von. Zdôraznime, že parametre nemyslíme URL adresu ani žiadne iné parametre od užívateľa, ale parametre metód v triede modelu. Model nevie, odkiaľ dáta v parametroch prišli. Rovnako tak nevie, ako budú výstupné dáta sformátované a vypísané.

V kurze budeme používať ORM (objektovo relačné mapovanie), modely potom priamo korešpondujú s databázovými tabuľkami. Pozrime sa napríklad na naše stránky www.itnetwork.sk. Tu budeme mať ako modely zaiste napríklad triedu User, Comment a Article. Inštancie modelov obsahujú samozrejme vlastnosti z databázy. Napr. inštancia modelu User má vlastnosť name. Triede môžeme definovať inštančné metódy, napr. takú, ktorá vypočíta vek užívateľa podľa jeho dátumu narodenia alebo zistí, koľko napísal komentárov v určitom časovom intervale. Modely môžu byť aj služby, napr. CalculatorService, ktorý si v neskorších lekciách naimplementujeme.

Teraz máme predstavu, čo model vykonáva, poďme sa pozrieť na pohľad (View).

View

Komponent view z MVC architektúry - Základy Spring Boot frameworku pre Javu

Pohľad (View) sa stará o zobrazenie výstupu užívateľovi. Jedná sa o HTML šablónu, obsahujúcu HTML stránku a tagy špeciálneho jazyka, ktorý umožňuje do šablóny vkladať premenné, prípadne vykonávať iterácie (cykly) a podmienky. Vráťme sa k nášmu príkladu. Pohľad user.html teda vypíše detaily o užívateľovi, pohľad article.html vypíše obsah článku.

Pohľadov máme mnoho, napr. pre funkcionalitu s entitou užívateľa: registration.html, login.html, profile.html a podobne. Pohľad profile.html je ale už spoločný všetkým užívateľom a sú do neho posielané rôzne dáta, vždy podľa toho, koho práve zobrazujeme. Tieto dáta sú potom dosadené do HTML elementov šablóny.

Šablóny je možné samozrejme vkladať do seba, aby sme sa neopakovali (šablóna s layoutom stránky, šablóna s menu a šablóna článkom).

View nie je len šablóna, ale hlavne zobrazovač výstupu. Obsahuje teda minimálne množstvo logiky, ktorá je pre výpis nutná (napr. kontrola, či si užívateľ vyplnil prezývku pred jej vypísaním alebo cyklus s komentármi, ktoré sa vypisujú).

View podobne ako Model vôbec nevie, odkiaľ mu dáta prišli, stará sa len o ich zobrazenie užívateľovi.

Teraz sa pozrieme na posledný komponent a tou je Controller.

Controller

Komponent controller z MVC architektúry - Základy Spring Boot frameworku pre Javu

Controller je teraz ten chýbajúci prvok, ktorý osvetlí funkčnosť celej architektúry. Jedná sa o akéhosi prostredníka, s ktorým komunikuje používateľ, model aj view. Drží teda celý systém pohromade a komponenty prepája. Jeho funkciu pochopíme z ukážky životného cyklu stránky. Najčastejšie má každá entita jeden controller, v našom príklade máme teda UserController, ArticleController a tak ďalej.

Životný cyklus stránky

Životný cyklus zahajuje užívateľ, ktorý zadá do prehliadača adresu webu a parametre. Tým nám povie, ktorú podstránku si praje zobraziť. Pokiaľ budeme chcieť zobraziť detail užívateľa s id 15, bude URL adresa vyzerať napríklad takto:

http://www.website.com/user/detail/15

Požiadavka ako prvá zachytí mapping. Ten podľa parametrov pozná, ktorý controller voláme a požiadavku mu odovzdá.

Daný controller podľa parametrov pozná, čo sa od neho chce, teda že má zobraziť detail užívateľa číslo 15. Zavolá model, ktorý používateľa vyhľadá v databáze a vráti jeho údaje. Ďalej môže zavolať rôzne metódy modelu, napr. vypočítanie veku užívateľa. Tieto údaje si controller ukladá do premenných. V ďalšom kroku sú View odovzdané premenné s príslušnými dátami. Controller teda poslúchol užívateľa, obstaral podľa parametrov dotazu dáta od modelu a odovzdal ich view.

View prijme dáta od controllera a vloží ich do pripravenej šablóny. Hotová stránka je zobrazená užívateľovi, ktorý často o celej tejto kráse ani nič netuší :)

Celú situáciu môžeme znázorniť diagramom:

MVC architektúra - Základy Spring Boot frameworku pre Javu

Dosiahli sme teda oddelenie logiky od výstupu. Naše modely sú napísané v Jave, view zase ako HTML. Komunikáciu medzi modelmi, view a užívateľom nám obstaráva controller. Kód je teda vďaka MVC prehľadný a logicky rozčlenený do jednotlivých súborov.

MVC architektúra nám uľahčuje aj myslenie pri vývoji projektu. Keď píšem logiku, patrí do modelu. Formátovanie a štylovanie výstupu riešim v šablóne. To, čo používateľ chce, zisťujem z parametrov pomocou controllera. Tri rôzne problémy na troch rôznych miestach, oddelené tak, aby do seba nezasahovali a nerobili nám vývoj zložitejší.

V ďalšej lekcii, Kontroléry a mapping v Java Spring Boot, si vytvoríme prvú menšiu aplikáciu. Bude zdraviť používateľov a tiež sa naučíme používať mapping.


 

Predchádzajúci článok
Vytvorenie Spring Boot projektu v Jave
Všetky články v sekcii
Základy Spring Boot frameworku pre Javu
Preskočiť článok
(neodporúčame)
Kontroléry a mapping v Java Spring Boot
Článok pre vás napísal Tomáš Střecha
Avatar
Užívateľské hodnotenie:
19 hlasov
Autor se věnuje tvorbě backend webových aplikací v Javovém frameworku Spring boot, grafickému vykreslování v C++ společně s pomocí OpenGL.
Aktivity