{"id":35,"date":"2012-11-08T19:44:18","date_gmt":"2012-11-08T18:44:18","guid":{"rendered":""},"modified":"2018-09-17T21:56:36","modified_gmt":"2018-09-17T19:56:36","slug":"carokrasny-svet-navrhovych-vzorov","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/carokrasny-svet-navrhovych-vzorov\/","title":{"rendered":"\u010carokr\u00e1sny svet n\u00e1vrhov\u00fdch vzorov"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/fskhkfsd.jpg\" alt=\"Obr\u00e1zok\" width=\"250\" height=\"200\" \/>Ak rie\u0161ite probl\u00e9m kon\u0161trukcie tried v objektovo orientovanom jazyku, ur\u010dite je dobre pozna\u0165 n\u00e1vrhov\u00e9ho vzory (design patterns). S\u00fa to hotov\u00e9 rie\u0161enia pre ur\u010dit\u00e9 skupiny probl\u00e9mov. Samo o sebe to znie fantasticky. N\u00e1jdem vzor a pou\u017eijem. Nie\u010do ako instantn\u00e1 polievka, ktor\u00fa sta\u010d\u00ed len zalia\u0165 hor\u00facou vodou a hotovo. Probl\u00e9m je, \u017ee ke\u010f si prenesiete my\u0161lienku toho vzoru do svojho k\u00f3du, m\u00f4\u017eete r\u00fdchlo narazi\u0165 na komplik\u00e1cie. To, \u010do sa zdalo v knihe tak\u00e9 jednoduch\u00e9 a jasn\u00e9, sa zrazu za\u010dne zamot\u00e1va\u0165. Nie\u010do sa ned\u00e1 urobi\u0165 tak, ako navrhuje kniha, inak by sa objavila komplik\u00e1cia niekde inde, v inej \u010dasti by do\u0161lo pou\u017eit\u00edm vzoru k spomaleniu aplik\u00e1cie at\u010f. Medzi svetom \u017eiv\u00e9ho k\u00f3du a t\u00fdm, v ktorom \u017eij\u00fa n\u00e1vrhov\u00e9ho vzory, je rozdiel. A na neho sa teraz pozrieme.<!--more--><!--break--><\/p>\n<p>Hne\u010f na za\u010diatku mus\u00edm poveda\u0165, \u017ee toto nie je kritika n\u00e1vrhov\u00fdch vzorov. Vzory s\u00fa ve\u013emi u\u017eito\u010dn\u00fd n\u00e1stroj ako sa vysporiada\u0165 s niektor\u00fdmi probl\u00e9mami najlep\u0161\u00edm mo\u017en\u00fdm sp\u00f4sobom. Viem to, lebo som ich za hist\u00f3riu, \u010do sa \u017eiv\u00edm programovan\u00edm, pou\u017eil u\u017e ve\u013eakr\u00e1t. Tento \u010dl\u00e1nok je sk\u00f4r zamyslenie sa nad t\u00fdm, pre\u010do je ich pou\u017eitie ob\u010das \u0165a\u017e\u0161ie ako by sa na prv\u00fd poh\u013ead mohlo zda\u0165.<\/p>\n<p>\u0160tandardne s\u00fa vzory, \u010di u\u017e v knihe ale na internete, prezentovan\u00e9 v jedno-probl\u00e9movom svete. To je svet, kde existuje len jeden probl\u00e9m. A<span style=\"background: none repeat scroll 0% 0% transparent;\">k sa napr\u00edklad bav\u00edme o vzore Facade, tak ten je zobrazen\u00fd vo svete, kde hlavn\u00fdm probl\u00e9mom je zjednodu\u0161enie<\/span> rozhrania. Znamen\u00e1 to, \u017ee triedy, ktor\u00e9 sa v pr\u00edklade o Facade vyskytuj\u00fa, maj\u00fa len tento jeden nedostatok (ich pou\u017eitie m\u00f4\u017ee by\u0165 komplikovan\u00e9 a Facade ho zjednodu\u0161uje). To, \u017ee je Facade v takomto svete prezentovan\u00e9, je v poriadku. Cie\u013eom je komunikova\u0165 my\u0161lienku, na \u010do je Facade u\u017eito\u010dn\u00fd (\u010do rie\u0161i), a teda mus\u00ed by\u0165 jasn\u00fd probl\u00e9m, aby som pochopil, \u010di je podobn\u00fd tomu m\u00f4jmu. Zatia\u013e to v\u0161etko sed\u00ed. Jeden probl\u00e9m, jedno rie\u0161enie.<\/p>\n<p>Komplik\u00e1cia pri pou\u017eit\u00ed vzorov nast\u00e1va v tom, \u017ee \u017eiadna re\u00e1lna produk\u010dn\u00e1 aplik\u00e1cia nem\u00e1 len jeden probl\u00e9m. Po\u017eiadavky funk\u010dn\u00e9 aj nefunk\u010dn\u00e9 vytv\u00e1raj\u00fa mno\u017estvo probl\u00e9mov, ktor\u00e9 treba rie\u0161i\u0165. A ob\u010das s\u00fa rie\u0161enia protichodn\u00e9 alebo ich kombin\u00e1ciou vznik\u00e1 komplikovan\u00fd k\u00f3d. Pekn\u00fdm pr\u00edkladom protichodn\u00fdch po\u017eiadaviek a ich rie\u0161en\u00ed je vysok\u00e1 r\u00fdchlos\u0165 k\u00f3du a flexibilita aplik\u00e1cie pri zmene funk\u010dnosti. Zatia\u013e \u010do to prv\u00e9 vo v\u00e4\u010d\u0161ine pr\u00edpadov vy\u017eaduje pevn\u00e9 v\u00e4zby medzi modulmi alebo triedami, to druh\u00e9 naopak v\u00e4zby \u010do najslab\u0161ie. Takto sa mus\u00ed v\u017edy h\u013eada\u0165 kompromis na z\u00e1klade toho, ktor\u00e1 po\u017eiadavka je ako d\u00f4le\u017eit\u00e1.<\/p>\n<p>Podobne je to s n\u00e1vrhov\u00fdmi vzormi. Tie nemusia by\u0165 protichodn\u00e9, ale ve\u013emi \u010dasto sa kombinuj\u00fa, resp. prich\u00e1dzaj\u00fa do stretu s in\u00fdmi nefunk\u010dn\u00fdmi po\u017eiadavkami, ktor\u00e9 som spom\u00ednal v predch\u00e1dzaj\u00facom odstavci. Pr\u00edkladom takej komplik\u00e1cie je pou\u017eitie MVC vzoru. Je to vzor, ktor\u00fd n\u00fati rozdeli\u0165 triedy aplik\u00e1cie do troch kateg\u00f3ri\u00ed pod\u013ea \u00fa\u010delu danej triedy. Na prv\u00fd poh\u013ead vyzer\u00e1 tak jednoducho a univerz\u00e1lne, \u017ee by sa mohlo zda\u0165, \u017ee jeho pou\u017eitie bude jednoduch\u00e9. Ale po\u010dn\u00fac behov\u00fdm prostred\u00edm, cez v\u00fdvojov\u00e9 prostriedky a kon\u010diac samotn\u00fdm n\u00e1vrhom v\u00e1m m\u00f4\u017eu vznikn\u00fa\u0165 triedy, ktor\u00e9 budete ma\u0165 probl\u00e9m zaradi\u0165 do niektorej z t\u00fdchto kateg\u00f3ri\u00ed. Osobitnou kapitolou v pr\u00edpade MVC je rozhodovanie, \u010di m\u00e1 View vrstva ma\u0165 priamy kontakt na Model vrstvu. Ak sa v\u00fdvoj nem\u00e1 pr\u00edli\u0161 komplikova\u0165, tak \u00e1no. Ak chcem zachova\u0165 \u010distotu n\u00e1vrhov\u00e9ho vzoru, tak by ju ma\u0165 nemala a v\u0161etky \u00fadaje by mala z\u00edskava\u0165 cez vrstvu controlera. Implement\u00e1ci\u00ed a vari\u00e1ci\u00ed MVC je mnoho a toto je len uk\u00e1\u017eka z rozhodovacieho procesu.<\/p>\n<p>Tu som sa dostal k asi najv\u00e4\u010d\u0161iemu probl\u00e9mu, s ktor\u00fdm vzory z\u00e1pasia. Ich pou\u017eitie toti\u017e vy\u017eaduje dodr\u017eiavanie ur\u010dit\u00fdch pravidiel pri p\u00edsan\u00ed k\u00f3du. Znamen\u00e1 to, \u017ee ob\u010das treba pou\u017ei\u0165 dlh\u0161iu cestu, aj ke\u010f existuje skratka. Vytvori\u0165 rozhranie k triede alebo rozdeli\u0165 pripravovan\u00fa funkcionalitu do viacer\u00fdch tried namiesto jednej. A zatia\u013e \u010do v \u010darokr\u00e1snom svete n\u00e1vrhov\u00fdch vzorov je \u010dasu dostatok na v\u0161etko, v tom re\u00e1lnom s\u00fa \u010das peniaze. \u010casov\u00e9 h\u013eadisko m\u00f4\u017ee \u00faplne zastavi\u0165 alebo v\u00fdrazne obmedzi\u0165 implement\u00e1ciu vzoru. A teda ke\u010f to v knihe vyzer\u00e1 tak jednoducho a super, v praxi zist\u00edte, \u017ee by ste museli vytv\u00e1ra\u0165 rozhranie pre v\u0161etk\u00fdch t\u00fdchto n-tried a za\u010dne sa to komplikova\u0165.<\/p>\n<p>Spr\u00e1vne implementovan\u00fd vzor v nejakej \u010dasti aplik\u00e1cie je nie\u010do, \u010do dok\u00e1\u017ee e\u0161te dlho po za\u010dat\u00ed v\u00fdvoja udr\u017ea\u0165 n\u00e1vrh v \u010distom stave. Ka\u017ed\u00fd vzor m\u00e1 toti\u017e pre v\u0161etky svoje triedy jasne definovan\u00e9 zodpovednosti. Pre kohoko\u013evek, kto pozn\u00e1 te\u00f3riu dan\u00e9ho vzoru, je potom tento k\u00f3d omnoho \u013eah\u0161ie str\u00e1vite\u013en\u00fd. Umo\u017e\u0148uje bavi\u0165 sa o k\u00f3de na vy\u0161\u0161ej \u00farovni abstrakcie at\u010f. Toto v\u0161etko a e\u0161te viac s\u00fa ciele, ktor\u00e9 s\u00fa na konci cesty implement\u00e1cie n\u00e1vrhov\u00fdch vzorov do aplik\u00e1cie. Po tej ceste sa ale nemus\u00ed \u00eds\u0165 v\u017edy \u013eahko. Pou\u017eitie vzorov komplikuj\u00fa in\u00e9 po\u017eiadavky na k\u00f3d, ich kombinovanie v r\u00e1mci jednej aplik\u00e1cie alebo jednoducho nedostatok \u010dasu ich plne implementova\u0165. Je dobr\u00e9 ma\u0165 tieto rizik\u00e1 pri ich pou\u017e\u00edvan\u00ed na pam\u00e4ti.<\/p>","protected":false},"excerpt":{"rendered":"<p>Ak rie\u0161ite probl\u00e9m kon\u0161trukcie tried v objektovo orientovanom jazyku, ur\u010dite je dobre pozna\u0165 n\u00e1vrhov\u00e9ho vzory (design patterns). S\u00fa to hotov\u00e9 rie\u0161enia pre ur\u010dit\u00e9 skupiny probl\u00e9mov. Samo o sebe to znie fantasticky. N\u00e1jdem vzor a pou\u017eijem. Nie\u010do ako instantn\u00e1 polievka, ktor\u00fa sta\u010d\u00ed len zalia\u0165 hor\u00facou vodou a hotovo. Probl\u00e9m je, \u017ee ke\u010f si prenesiete my\u0161lienku toho [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-35","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/35","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=35"}],"version-history":[{"count":1,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/35\/revisions"}],"predecessor-version":[{"id":209,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/35\/revisions\/209"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}