5. časť série o Clean Code je zároveň aj poslednou a rozoberáme v nej kapitoly System a Emergent Design. Ako funguje mesto? Jeden človek všetko riadi? Keď nám prestane tiecť voda, tak nebudú ani odvážať odpad? Nie. Separation of Concerns. V druhej časti epizódy sa pobavíme o 4 pravidlách, ktoré nás privedú k dobrému dizajnu.
00:00 – 00:29 Úvod
00:29 – 03:27 Viete si predstaviť, že vybudujete sami mesto?
03:28 – 07:20 Separation of Concerns
07:21 – 11:03 Dependency injection
11:04 – 12:39 Separation of Concerns ako základ pre agilný vývoj
12:40 – 15:15 Aj pri agilnom vývoji treba myslieť trochu dopredu
15:16 – 16:34 4 Pravidlá pre Emergent Design
16:35 – 20:11 Pravidlo 1: Prechádzajú všetky testy
20:12 – Pravidlo 2: Duplikácia
Budujeme mesto
Pri malej dedine môže mať beh celej dediny na starosti jeden človek (jedna classa vie v malom programe riešiť všetko).
Separation of Concerns – každá jednotka v kóde je zodpovedná za svoju vec a nemieša sa do starostí niekoho iného (napr. ho nezaujíma ako vytvorí nejakú nadradenú classu – nevytvára ju).
Keď začíname systém budovať môžeme mať všetko pokope. Postupne ako nám táto “kopa” rastie začne byť čast na to, aby sme to pekne oddelili.
Dobrým príkladom Separation of Concerns je Dependency Injection – objekty, ktoré classa používa vytvára za nás framework (alebo niečo iné) a my to nemusíme v každej classe robit zvlášť
Agilný vývoj je vôbec možný hlavne vďaka práve Separation of Concerns. Tým, že je všetko oddelené, sa nám to oveľa ľahšie rozširuje alebo mení.
Keď ideme agilne, tak aj tak potrebujeme mať trochu víziu ako to má vyzerať v budúcnosti, aká veľká bude naša aplikácia a tak.
Emergent design
4 pravidlá, ktoré by malispôsobiť, ženámvzniknedobrý design:
Prechádzajuvšetky testy
Neobsahuježiadnuduplikáciu
Vyjadrujeúmyselprogramátora
Minimalizujepočet tried a metód
Prechádzajú všetky testy
Systémmôžebyťperfektnenavrhnutý, ale pokiaľneviemoveriť, ženaozajfunguje, tak je celýsystém spochybnený
Keď zrazu neprechádza nejaký test, tak to treba čím skôr, rozumej hneď, opraviť
Keďvytváramesystémtak, aby boltestovateľný, takzároveňnástotlačí k tomu, aby našetriedybolimalé a jednoúčelové (SRP – single responsibility principle)
Previazanýsystém sa tiežtažkotestuje. Čímviactestujeme, týmviacmusímevyužívatprincípyako dependency injection, interfaces, aby sme toto previazanieznížili
Body 2 až 4 (v podstate refaktorovanie)
Vďakabodučíslo 1 (máme testy) sa nemusíme báť, že refaktorovaním niečo pokazíme
Duplikácia – úplnerovnakériadky, podobnériadky, ktoré sa dajúupraviťnatotožne a vytiahnuť von, dvakrátvyjadrímtoisté,leninak
Vyjadruje úmysel programátora – čímväčšísystém, tým je dôležitejšiejasnevyjadriťčosmechcelikódomdosiahnuť. Dobrénázvy, malétriedy a funkcie, keďpoužívamDesignPatternytaktakajnazývamtriedy. Najdôležitejšie je, sa o tovôbecpokúsiť. Nepovedaťsi, ževšak to funguje, skončil som.
Minimalizovanie počtu tried a funkcií – všetkyprincípy sa dajúpreháňať a potom sa námstáva, žemámemiliónmalých tried, milióninterfacov, miliónmalýchfunkcií, …. Pravidlomávšaknajnižšiuprioritu, ale trebabyťnaozajopatrnýpripreháňaní s dodržiavanímvšetkýchprincípov (aj v tejto knihe).
Záver
Dá sa povedať, žekeďbudešnasledovaťtýchto X princípov, tak z tebabudeprogramátor? Ani nielenžedobrý, ale vôbecprogramátor? Nie. Musíšsi to vyskúšať. Musíšsisadnúť za comp a programovať. Písať. Veľa. Čímväčšieveci v životenapíšeštýmviacskúsenostibudešmať. Tieto princípy je naozaj potrebné vedieť brať s rezervou resp. vedieť kde je ten zlatý stred.