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
CategoryManagera 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
MVCpoužíva väčšina moderných frameworkov, ako sú Nette, Symfony, Laravel a ďalšie.S
MVCsa 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 a novinky nejen ze světa PHP a programování. Nenechte si ujít jediný článek.
Články píše Jan Barášek © 2009-2025 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sk