Existujú knihy, o ktorých si myslím, že by ich mal prečítať každý programátor. Väčšinou obsahujú vydestilovanú podstatu dobrých programátorských zvykov, ktoré sú aplikovateľné na ľubovoľný projekt. Jedna z týchto kníh, na ktorú som narazil dobrých 10 rokov dozadu, bola Clean Code od Roberta C. Martina. Aj po tých desiatich rokoch ju vnímam ako zdroj informácií o tom, ako by sa mali programátori na projekte správať. O to viac som sa potešil, keď sa mi od toho istého autora dostala do rúk jej nasledovníčka s názvom Clean Architecture.
Musím hneď na začiatku povedať, že keď som si túto knihu kupoval, mal som (vzhľadom na autora) pomerne vysoké očakávania. Predpokladal som, že to bude ako Clean Code, ale o architektúre. Že pomerne zložitú a abstraktnú tému bude vedieť podať vo forme rád, ktoré si zajtra ráno viete zobrať zo sebou do práce a začať aplikovať. A autor ma nesklamal.
Najviac zo všetkého mi kniha pripadá ako séria esejí a zamyslení nad rôznymi témami, ktoré s architektúrou súvisia. Dúfam, že som vás (technicky založených čitateľov) teraz nevyľakal, ale aj keď tu používam pojmy ako esej, tak v skutočnosti je to písané pre programátorov a architektov. Takže čo sa v knihe vlastne dá nájsť?
Robert začína tým, že sa snaží definovať, čo je to architektúra softvéru (a čo nie je). Aké sú možnosti pri jej tvorbe, čím sa dostáva k paradigmám programovania (tvrdí, že v skutočnosti existujú len tri a že už desaťročia žiadna nová neprišla a pravdepodobne už ani nepríde – zaujímavá myšlienka).
Po ľahšom úvodne prichádza časť, ktorá by vám mohla pomôcť navrhnúť dobrú architektúru. Je to šesť princípov, ktoré sú aplikovateľné na architektúru. Niektoré z nich, ako napríklad Liskov Substitučný princíp alebo Open-Close princíp sú známe ako princípy tvorby kódu. Tu ich autor používa, aby pomocou nich navrhol moduly – krabičky – architektúry, a pri tom zachoval čo najviac dobrých vlastností.
Po tomto zozname princípov prichádza zoznam rôznych tém. Čo sú to hranice v architektúre? Ako k nim pristupovať a ako ich budovať? Komponenty. Kohézia komponentov (t.j. či sú vnútorne súdržné) a väzby medzi komponentami. Autor sa nevyhne dôležitej téme a to, že väzby medzi komponentami existujú (väčšinou) na troch rôznych úrovniach:
- kompilácia – závislosti musia byť dostupné v čase kompilácie pre kompilátor
- nasadenie – závislosti musia byť dostupné v čase, keď sa aplikácia spúšťa
- beh aplikácie – závislosti musia byť dostupné v čase, keď aplikácia vykonáva nejakú operáciu
Čím neskoršiu väzbu pre komponenty vyberieme, tým je slabšia (odhliadnuc od toho, že silu väzby ešte určuje, koľko detailov vie jeden komponent o druhom). Ale zároveň vývoj takýchto komponentov môže byť komplikovanejší, hlavne čo sa týka odhaľovania nekompatibilít. Najjednoduchšie je, ak kompatibilitu komponentu skontroluje kompilátor. Za prvé je to zachytené v čo najskoršom okamihu, a za druhé väčšinou vie najlepšie povedať, v čom konkrétne je zle.
Záverom knihy sa autor venuje detailom. Na prvý pohľad to možno znie nepodstatne, ale Robert nazýva „detailom“ databázu, grafické rozhranie alebo framework, ktorý ako hlavný vaša aplikácia používa. Predstavte si, že navrhujete štandardný informačný systém a to, do akej databázy to budete ukladať, sa rozhodnete tesne pred implementáciou, resp. počas nej. Predstavte si, že framework, ktorý používate, je detail, ktorý budete riešiť tak neskoro, ako je to len možné. Presne takto sa pozerať na tieto súčasti aplikácie radí autor.
Radí navrhnúť aplikáciu tak, aby to, aký databázový systém presne budete používať, bol detail, ktorý sa dá ľahko zmeniť. Aby zásahy do kódu, ktoré si vyžaduje jej použitie, boli minimálne a izolované. Inak povedané, aby to čo najmenej ovplyvňovalo samotnú aplikáciu. To isté platí pre grafické rozhranie a aj framework, ktorý by vašu aplikáciu mal držať po kope. Hlavná myšlienka je v tom, že keď si tieto technické komponenty príliš pustíte do aplikácie, začnú určovať ako bude vyzerať. A keďže oni neboli navrhnuté špeciálne pre vašu aplikáciu, tak sa môže stať, že vzniknutá štruktúra nebude úplne najvhodnejšia…
Kniha Clean Architecture by mala prejsť rukami každého vývojára. Žiaden vývojár sa totiž vo svojej práci nevyhne tomu, aby bol architektom. Aby rozmýšľal a rozhodoval, kde umiestni časť kódu a ako vytvorí väzby medzi jednotlivými časťami. Nemusíte so všetkým, čo v tejto knihe nájdete, súhlasiť (ja osobne by som mal pár výhrad), ale je to vynikajúca potrava pre premýšľanie a ako nový uhol pohľadu na túto tému.