Fejlesztőként gyakran felmerülhet benned a kérdés, hogy hogyan érdemes belekezdeni a szoftvertervezésbe.
Legyen szó teljes projektről, vagy egy nagyobb megvalósítandó részfeladatról, front-endről vagy back-endről, bizonyára tapasztaltad már, hogy:
- Nem tudod hogyan kezdj hozzá.
- Menet közben rájössz, hogy ezt lehetett volna egyszerűbben is.
- Vagy éppen a projekt közepén rájössz, hogy máshogy kellett volna és ezért kezdheted az egészet elölről.
Az alapvető probléma, amivel a projekt elején küzdünk az az, hogy egyszerre kell látnunk a teljes képet és a részleteket is, viszont egészen addig nem láthatjuk a teljes képet, amíg nem dolgoztuk ki a részleteket.
A problémára a megoldás, ha a projekt elejétől kezdve tudatosan próbálod kikristályosítani a rendszeredre jellemző architekturális elemeket.
Nincs más dolgod, mint először horizontálisan megvalósítani pár követelményt.
Horizontális alatt azt értjük, hogy az adat belépésétől a végállapotba való eljutásáig minden lépésre sor kerül.
Nézzünk egy tipikus back-endes példát:
Tegyük fel hogy azt kérte a főnök, hogy amikor beérkezik a HTTP kérés, akkor:
- Authorizáljuk azt,
- Ezután parsoljuk ki az adatot a kérésből,
- Validáljuk, hogy az adattal minden rendben van-e
- Majd tároljuk el az adatbázisba
Ezt első nekifutásra érdemes úgy lekódolnod, hogy a részleteket nem dolgozod ki, csak nagyjából működjön. Ebben a fázisban az a legjobb jelmondat, hogy “egyelőre jó lesz így”.
Folytassuk azzal, hogy megvalósítunk egy másik ilyen követelményt is, ahol az történik, hogy kérés beérkezésekor,
- kiparsoljuk az adatot
- validáljuk
- elküldünk egy visszaigazoló emailt
- majd eltároljuk
Csináljunk egy harmadikat is, itt a főnök azt kérte, hogy
- authorizáljuk a kérést,
- parsoljuk ki belőle az adatot,
- küldjünk visszaigazoló emailt,
- majd eltároljuk az adatot
Ha készen vagy pár ilyen horizontális megvalósítással, akkor utána próbálj meg vertikálisan gondolkozni.
Vertikális alatt azt értjük, hogy sok esetet felölelő, de a feladat csak egy kis részére vonatkozó absztrakciókat keresünk.
Az absztrakciók megtalálására jó módszer, ha próbálod összepárosítani az egyes elemeket az input és output adatok fajtája alapján.
Ebben a példában a következő absztrakciókat találhatjuk:
- Validáló (ami arra összpontosít, hogy az adatot megvizsgálja, megfelelő-e vagy sem),
- Email küldő,
- Adatbázisba eltároló,
- Requestből kiparsoló,
- És authorizáló.
Ha beazonosítottál pár ilyet, akkor rendezd át a kódodat úgy, hogy a vertikális, tehát az egy feladatkör köré csoportosuló eszközök közös helyen legyenek.
Közös hely lehet például egy fájl, ahova function-ök formájában kiszervezed kódokat, de lehet akár egy mappa is sok fájllal, class deklarációkkal.
Sok esetben teljesen össze lehet vonni a funkcionalitást egyetlen függvénybe.
Az egyetlen fontos szabály az az, hogyha az egyik helyen változtatás történik a kódban, akkor ez a változtatás nem lehet kihatással egy másik helyen lévő kódra, ahova más feladatot elvégző kódot gyűjtöttél.
Ha összecsoportosítottad a kódot, akkor utána dologozd ki részletesen a belső implementációkat.
Ilyenkor érdemes bevetni 3. féltől származó könyvtárakat.
A továbbiakban ehhez hasonló módon kell váltogatnod a horizontális és a vertikális irányú gondolkozást és a részletes megvalósítást.
Ahogy építed a programot, a részletes megvalósítás már egyre könnyebb lesz, mert egyre inkább tudsz támaszkodni meglévő kódra.
- A technikával azt éred el, hogy:
- Kialakítasz egy magasabb szintű rendszert
- Könnyebb lesz funkcionalitást megosztani az azonos jellegű feladatokat elvégző kódrészletek között.
- Nem lesznek a kódodban hirtelen kontextus váltások.
- Letisztult felületeid lesznek amik újrafelhasználható modulokat határolnak.
- Emellett kialakul a rendszeredre egy sajátos nyelvezet, az egyes rétegek által elvégzett feladatok szerint. (Pl repository réteg, validáló réteg, authorizációs réteg stb.)
Teljes videó:
Ajánlott cikk: Rekurzió