Ep. 15 – Clean Code Part 5 (System, Emergent Design)
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 mali spôsobiť, že nám vznikne dobrý design:
- Prechádzaju všetky testy
- Neobsahuje žiadnu duplikáciu
- Vyjadruje úmysel programátora
- Minimalizuje počet tried a metód
Prechádzajú všetky testy
- Systém môže byť perfektne navrhnutý, ale pokiaľ neviem overiť, že naozaj funguje, tak je celý systém spochybnený
- Keď zrazu neprechádza nejaký test, tak to treba čím skôr, rozumej hneď, opraviť
- Keď vytvárame systém tak, aby bol testovateľný, tak zároveň nás to tlačí k tomu, aby naše triedy boli malé a jednoúčelové (SRP – single responsibility principle)
- Previazaný systém sa tiež tažko testuje. Čím viac testujeme, tým viac musíme využívat princípy ako dependency injection, interfaces, aby sme toto previazanie znížili
Body 2 až 4 (v podstate refaktorovanie)
- Vďaka bodu číslo 1 (máme testy) sa nemusíme báť, že refaktorovaním niečo pokazíme
- Duplikácia – úplne rovnaké riadky, podobné riadky, ktoré sa dajú upraviť na totožne a vytiahnuť von, dva krát vyjadrím to isté, len inak
- Vyjadruje úmysel programátora – čím väčší systém, tým je dôležitejšie jasne vyjadriť čo sme chceli kódom dosiahnuť. Dobré názvy, malé triedy a funkcie, keď používam DesignPatterny tak tak aj nazývam triedy. Najdôležitejšie je, sa o to vôbec pokúsiť. Nepovedať si, že však to funguje, skončil som.
- Minimalizovanie počtu tried a funkcií – všetky princípy sa dajú preháňať a potom sa nám stáva, že máme milión malých tried, milión interfacov, milión malých funkcií, …. Pravidlo má však najnižšiu prioritu, ale treba byť naozaj opatrný pri preháňaní s dodržiavaním všetkých princípov (aj v tejto knihe).
Záver
Dá sa povedať, že keď budeš nasledovať týchto X princípov, tak z teba bude programátor? Ani nie len že dobrý, ale vôbec programátor? Nie. Musíš si to vyskúšať. Musíš si sadnúť za comp a programovať. Písať. Veľa. Čím väčšie veci v živote napíšeš tým viac skúsenosti budeš mať. Tieto princípy je naozaj potrebné vedieť brať s rezervou resp. vedieť kde je ten zlatý stred.