Návrhové vzory sú spôsoby myslenia o programovaní.
Poskytujú zbierku rád, hotových postupov, osvedčených postupov a náhľadov na vývoj. Pre každú programovú paradigmu a typ úlohy sú najvhodnejšie určité návrhové vzory.
Pri programovaní sa riešenie určitých typov problémov opakuje, preto má zmysel vybrať si jednu metódu na riešenie týchto problémov a túto metódu opakovať.
Hlavný prínos vzniká najmä pri tímovom vývoji, keď všetci vedia, ako sa bude aplikácia vyvíjať (podľa akého návrhového vzoru), a jednoducho ho aplikujú. Vďaka tomu potom odpadajú zbytočné desiatky hodín ladenia podivne napísaného kódu a snahy pochopiť princípy, ktoré autor zamýšľal.
Môj obľúbený návrhový vzor je MVC
(z anglického Model View Controller
), ktorý hovorí, že aplikácia je rozdelená na 3 nezávislé vrstvy, ktoré sa navzájom postupne volajú a odovzdávajú si údaje.
Napríklad pri vykresľovaní stránky to môže vyzerať tak, že sa najprv rozhodne, o aký typ stránky ide (napríklad o detail kategórie), takže zavolá CategoryController
s metódou detail
.
Konkrétny príklad (veľmi zjednodušujem):
class CategoryController{public CategoryManager $categoryManager;public function actionDetail(string $id): void{$this->template->id = $id;$this->template->category = $this->categoryManager->getById($id);}}
Poznámka:
Toto je len ukážka kódu, ktorá vysvetľuje princíp návrhového vzoru
MVC
.V skutočnej implementácii by sme museli ďalej vymyslieť, ako napríklad získať inštanciu
CategoryManager
a ako ju odovzdať vlastnosti. Na tento typ úloh sa zvyčajne používaDependency injection
.
Pred vykreslením stránky pre detail kategórie sa najprv zavolá CategoryController
, ktorý prijme aktuálnu požiadavku (t. j. vykreslíme detail kategórie s určitým ID, ktoré získa smerovač napríklad v adrese URL), získa údaje (dopytovaním sa na príslušný Model
) a odovzdá konečné údaje šablóne na vykreslenie.
Obrovskou výhodou tohto princípu je, že môžeme napísať mnoho modelov (aplikačná logika), ktoré sú nezávislé od spôsobu prezentácie údajov (šablóna), čo vedie k opakovane použiteľnému kódu. V skutočnosti, ak chceme použiť CategoryManager
v inom projekte, jednoducho odovzdáme dáta cez Controller
špecifickým spôsobom, ktorý sa vykreslí podľa šablóny definovanej samotným projektom, pričom aplikačná logika zostáva rovnaká a nikoho to nezaujíma, pretože softvérová vrstva splnila svoje dohodnuté rozhranie a povinnosti.
Praktická poznámka:
Návrhový vzor
MVC
používa väčšina moderných frameworkov, ako sú Nette, Symfony, Laravel a ďalšie.S
MVC
sa môžeme stretnúť aj pri vývoji mobilných aplikácií a iných typov softvéru, kde potrebujeme získať údaje a vykresliť ich do šablóny podľa typu stránky alebo zobrazenia.
Vo všeobecnosti v programovaní existuje mnoho návrhových vzorov, ktoré nie sú vhodné pre vývoj webových stránok. Tento zoznam opisuje najdôležitejšie vzory, ktoré sám používam a ktoré by ste mali poznať.
Kompletný zoznam všetkých návrhových vzorov, príklady ich použitia a podrobné vysvetlenia nájdete na samostatnej stránke.
Model
(aplikačná logika a dáta), View
(šablóna a zobrazenie dát) a Controller
(prepojenie Modelu
a View
).Dependency injection
, kde má každá služba len jednu inštanciu, ktorá sa odovzdáva v rámci celej aplikácie).Adaptér
konvertuje údaje z jedného typu na druhý (typicky konvertuje natívne dátové typy PHP na databázové dátové typy a späť).Návrhových vzorov je oveľa viac, tieto boli najdôležitejšie, ktoré by ste mali poznať.
Niektoré techniky programovania sa považujú za "anti-vzor", čo je presný opak návrhového vzoru. Zvyčajne ide o techniku, ktorá vytvára zvláštny kód, ktorý sa nedá ľahko odladiť, udržiavať a správa sa "magicky".
Typickým príkladom je použitie globálnych premenných.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sk