Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

3. diel - Úvod do MVC architektúry vo Spring Boot

V predchádzajúcej lekcii, Vytvorenie Spring Boot projektu v Jave , sme si pripravili vývojové prostredie pre Spring Boot a nainštalovali si plugin Lombok. 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. Osobne si bez neho (alebo nejakého podobného princípu) nedokážem predstaviť zložitejšie 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. Súbor teda obsahuje databázové dotazy, logiku (Java kód) a rôzne pohádzané HTML tagy. Všetko je zamotané do seba ako špagety.

Kód sa samozrejme zle udržuje, nieto 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ším cieľom je, aby zdrojový kód s logikou 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.

Komponenty

Celá aplikácia je rozdelená na komponenty 3 typov, hovoríme o:

  • modeloch,
  • View (pohľadoch) a
  • Controller (Kontrolér).

Z toho tiež vychádza názov MVC. Označenie pohľad sa budem snažiť vyhýbať, pretože mi príde mätúce, že takto preloženej nekorešponduje s písmenom V. Neexistuje žiadna striktná definícia architektúry a tak sa môžete stretnúť s viacerými výklady. My sa zameriame na ten najrozšírenejší.

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

Model

Komponent model z MVC architektúry - Spring Boot
Model obsahuje logiku a všetko, čo do nej spadá. Môžu to byť výpočty, databázové dotazy, validácie 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 vydanie 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šla a ani ako budú výstupné dáta naformá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. Máme teda model User, Comment alebo Article. Instance 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 používateľa podľa jeho dátumu narodenia. Modely môžu byť tiež služby, napr. CalculatorService.

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

View

Komponent view z MVC architektúry - Spring Boot
Pohľad (View) sa stará o zobrazenie výstupu užívateľovi. Jedná sa o HTML šablónu, obsahujúci 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. Pohľad user.html teda vypíše detaily o používateľovi, pohľad article.html vypíše obsah článku.

Pohľadov máme veľa, 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 zrovna zobrazujeme. Tieto dáta sú potom dosadená do HTML elementov šablóny.

Šablóny možno 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 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šla, stará sa len o ich zobrazenie užívateľovi.

Controller

Komponent controller z MVC architektúry - Spring Boot
Controller je teraz onen chýbajúci prvok, ktorý osvetlí funkčnosť celej architektúry. Ide o akéhosi prostredníka, s ktorým komunikuje užívateľ, model i 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, máme teda UserController, ArticleController a tak podobne.

Životný cyklus stránky

Životný cyklus začína používateľ, ktorý zadá do prehliadača adresu webu a parametre, ktorými nám oznámi, ktorú podstránku si želá zobraziť. Budeme chcieť zobraziť detail užívateľov s id 15. Urobme si ukážku URL adresy:

http://www.domena.cz/user/detail/15

Požiadavka ako prvý zachytí tzv. Router. Ten podľa parametrov spozná, ktorý controller voláme.

Daný controller podľa parametrov spozná, čo sa po ňom chce, teda že má zobraziť detail užívateľa. Zavolá model, ktorý používateľa vyhľadá v databáze a vráti jeho údaje. Ďalej zavolá ďalšiu metódu modelu, ktorá napr. Vypočíta vek používateľa. Tieto údaje si controller ukladá do premenných. Nakoniec vyrenderuje view (pohľad). Názov pohľadu poznáme podľa akcie, ktorú vykonávame. View sú 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 Controlleru a vloží ich do pripravenej šablóny. Hotová stránka je zobrazená užívateľovi, ktorý často o celej tejto kráse ani netušia:)

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

MVC architektúra - Spring Boot

Získali sme teda oddelenie logiky od výstupu, view sú ako HTML súbory, modely zas v Jave. Dosiahli sme prehľadnosti kódu, ktorý je logicky rozčlenený.

MVC architektúra nám uľahčuje aj myslenia pri vývoji projektu. Keď píšem logiku, patrí do modelu, formátovanie a štýlovanie výstupu riešim v šablóne, to čo užívateľ chce z parametrov zisťujem v Controlleru. 3 rôzne problémy na 3 rôznych miestach, oddelené tak, aby do seba nezasahovali a nerobili nám vývoj zložitejšie.

V ďalšej lekcii, Mapping (routing) v Java Spring Boot , si vytvoríme prvú menšiu aplikáciu. Bude vedieť vygenerovať náhodné číslo, pozdraví používateľa jeho mene 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
Spring Boot
Preskočiť článok
(neodporúčame)
Mapping (routing) v Java Spring Boot
Článok pre vás napísal Tomáš Střecha
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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