Clean Code - Abszrakciós szintek, DRY (don't repeat yourself)

Néhány alapfogalmat bedobok a közösbe folytatólagosan mielőtt komolyabban belemennék a clean code-os dolgokba, ha már egyszer régen megígértem, hogy írok róla cikket. Az egyik az absztrakciós szintek fogalma.

Ez durván arról szól, hogy a magas szintű dolgok az emberi gondolkodásmódhoz állnak közel, az alacsony szintű dolgok meg a gépi gondolkodásmódhoz. Ez egy folytonos skála. Minden projekt lefejlesztése gyakorlatilag arról szól, hogy az absztrakciós szint különbséget áthidaljuk, ami fejlesztő és gép között van. Sokszor ebbe a sorba még becsatlakoznak további emberek, pl megrendelő, projekt menedzser, domain expert, illetve a program különböző részeinek a fejlesztői, szóval egy elég komplex gráf is kijöhet, ami mind arra irányul, hogy a fentről (magasabb absztrakciós szintről) érkező információt beépítsük a kódba.




A magasabb absztrakciós szint általában arról szól, hogy mit csináljon a kód (vagy éppen mit kódoljon le a fejlesztő), az alacsony absztrakciós szint meg arról szól, hogy hogyan csinálja meg azt a bizonyos dolgot. Ez a fajta logika annyira beleitta magát a programozásba, hogy konkrétan a kódon is elég erősen meglátszik. Vannak alacsony szintű nyelvek, pl assembly, amiknek nehezen értelmezhető a kódja első ránézésre. Aztán vannak magas szintű nyelvek, pl java, amiknek a kódja már jól olvasható feltéve, hogy a clean code ajánlásait betartjuk, tehát tényleg törekszünk a jól olvasható kód írására. A programozás során egy feladat specifikus nyelvet alakítunk ki, ami kitölti az adott programnyelv és a magas szinten (emberi nyelven) megfogalmazott specifikáció közötti rést. Annyiból szerencsések vagyunk, hogy nem kell gépi kóddal foglalkoznunk, mert a gépi kód és a magas szintű nyelv közötti rést már kitöltötte a programnyelv megalkotója helyettünk. Abból is szerencsések vagyunk, hogyha keretrendszereket használunk, akkor eleve még magasabb absztrakciós szintről indulunk, és így még kisebb az az absztrakciós szint különbség, amit ki kell töltenünk a saját kódunkkal. Ez egészen elmehet odáig, hogy maga a megrendelő össze tudja állítani magának a kódot egy mesterséges intelligencia segítségével. Erre már vannak törekvések, de azért ott még nem vagyunk, hogy félteni kéne az állásunkat.

Az absztrakciós szinttel kapcsolatban még egy fogalmat ki kell tárgyalni, nevezetesen az absztrakciót. Az absztrakció valami elvonatkoztatás a konkrétumoktól. Mindig valami általánosítása a problémának. Az általánosítás azért jó, mert sok esetben újra felhasználható. Így a kódunk DRY (don't repeat yourself) marad. Ez nem csak azért jó, mert időd spórol nekünk a fejlesztésnél, hanem azért is, mert a DRY-nak köszönhetően az olyan részek is könnyen módosíthatóvá válnak, amik egyébként sokszor ismétlődnének. A DRY az egyik legfontosabb vezérelv a programozásban, és csak nagyon ritka esetben szegjük meg. Ilyen eset pl DDD-nél, amikor két bounded context-ben egy entitásnak részben ugyanazokat a tulajdonságait használjuk. Abban az esetben felülírja az SRP. A DRY-al kapcsolatban még érdemes megemlíteni, hogyha alkalmazzuk, és refaktoráljuk az aktuális kódot, akkor sok esetben többé-kevésbé magától kialakul egy általános kódrészlet, ami magasabb absztrakciós szintű, mint az addigi kód, nyilván mert elvontabb. A refaktorálásnak, a kód tisztán tartásának, tehát olyan szempontból is van értelme, hogy a segítségével jobban széttagolódnak az absztrakciós szintek. Egy spagetti kódban pl sehol nem írjuk le, hogy mit csinál a kód, csak azt, hogy hogyan csinálja. Amikor a DRY betartásával refaktoráljuk ezt a kódot, akkor már kialakulnak az absztrakciós szintek, és a legfelső absztrakciós szinten látni fogjuk, hogy mit csinál a kód feltéve, ha a feladatkörük szerint neveztük el az egyes osztályokat és metódusokat. A DRY tehát vertikálisan tagolja szét a kódot absztrakciós szintekre, de csak abban az esetben, ha ismétlődések vannak. Ennél nem tud többet, ha ennél többet szeretnénk, akkor az SRP-hez kell fordulnunk, ami már sokkal többet segít. Azt egy következő bejegyzésben tárgyalom ki, hogy hogyan.

Nincsenek megjegyzések:

Megjegyzés küldése