Framework je jenom delivery mechanism a nemá určovat strukturu složek projektu!

Často slýchám o tom, že se nějaký backend vývojář oškleboval, když slyšel, že projekt je napsanej v Nette Frameworku a né v Symfony. Nebo vůbec, že by nikdy nechtěl jít do projektu, kterej používá Nette. Často taky čítám „Náš projekt je postavenej na Nette/Symfony“, nebo „Hledáme Nette/Symfony vývojáře“.

Cože jako? 🙂 Vážně středobod programování a to nejzajímavější na projektu je framework, kterej využívá? A vážně celej projekt jako takovej, stojí na konkrétnim frameworku? Nechápu všechny ty nekonečný „framework wars“. Mám z toho pocit, jako kdyby ústřednim tématem konstruktérů aut byl typ kol, který auto bude mít. Jasně, neoddiskutovatelně, kola jsou fakt hodně důležitý součásti auta a různý kola maj různý vlastnosti, výhody a nevýhody. Ale opravdu je to věc, na kterou by se měla soustředit největší pozornost?

Proč tomu tak je, se snažím pochopit. Možná, že díky tomu, že MVC frameworky jsou asi nejprobíranějším tématem a je o nich psáno nejvíc článků, tak si většina začínajích programátorů myslí, že je to ústřední pattern, na kterém je aplikace postavena. Mam pocit, že tím vzniká mylné přesvědčení, že aplikace se skládá ze tří ekvivalentně komplexních/důležitých částí – Modelů, Pohledů (Views) a Contollerů a framework nám pomáhá vypořádat se se všemi.

Ve skutečnosti ústřední věcí, kterou frameworky řeší, jsou Views a Controllery. Podobně jako u kol, které umožňují autu pohyb, tak Controllery nám umožňují aplikaci ovládat a stejně jako karosa a vnitřní interiér, Views určují způsob ovládání. Samotná naše aplikace jako taková, by mělo být ono M. S tím nám framework může pomoct maximálně nějakými užitečnými nástroji, které můžeme, ale nemusíme využít.

Mám pocit, že Modelová část je díky tomu trochu „podceňována“ a příliš spojována s MVC frameworky. I když jsem si vědom, že jde o odlišné věci, nainstaloval jsem si gimp, abych výše zmíněné přirovnání vizuálně vyjádřil:

Model nesouvisí s MVC frameworkem takřka nijak a už vůbec neplatí to, že by platila nějaká souvislost, že jededen controller by měl mít jeden model. Tenhle mýtus je častý u nováčků, protože většina příkladů na MVC frameworky to tak má. Je tu ale ještě jeden podle mě velkej nešvar, kterej se vyskytuje i u pokročilejších programátorů a tím je složková struktura.

Když se podíváte na libovolnou MVC aplikaci (zkuste tu svojí), jak rychle ze složkové struktury poznáte, jaký framework používá? A jak rychle zjistíte, co vlastně dělá? Přijde mi zcestné, že většina aplikací složkovou strukturou na první pohled komunikují to, jaký framework používají a z čeho se skládají – ano, narážím i na slavné složky Models, Views, a Controllers. Pro to, co vlastně aplikace dělá, se až v druhé řadě člověk musí spíše pídit.

Myslím si, že když tvoříme sožkovou strukturu a rozhodujeme se, jestli soubory dělit podle typu obsahu vs záměru a funkce obsahu, měli bychom vždycky, pokud to aspoň trochu dává smysl, upřenostnit záměr a funkci (feature):

Příklad složkové struktury projektu, na kterém dělám

Na nějakých úrovních se samozřejmě hodí rozlišit i typ obsahu:

Další příklad – neříkám, že je to správný nebo dokonce jediný správný způsob. Ale je to pro mě zatím nejlepší způsob, který znám.

Když ale primárně upřednostňuji záměr před typem, myslím si, že aplikace mnohem lépe komunikuje, co vlastně dělá. Je podle mě explicitnějši.

Pointa tohodle článku není navážet se do frameworků, ale spíše vytvořit (možná další) statickej výkřik do tmy: Soustřeďme se více na to, jak správně modelovat naše aplikace, než na to, jaký nástroj je lepší pro definování způsobu interakce s nimi. 🙂

Příspěvek byl publikován v rubrice Nezařazené a jeho autorem je tomcizek. Můžete si jeho odkaz uložit mezi své oblíbené záložky nebo ho sdílet s přáteli.
  • Jako bys mi mluvil z duše – na příkladu s rozebraným autem je to krásně vidět (: