Az infokukac blog 2010. márciusában átköltözött. Átirányítás folyamatban...

Az átirányítás automatikus. Ha mégsem sikerülne, látogasd meg az új oldalt a http://infokukac.com címen, és frissítsd a könyvjelzőidet!

2009. július 1., szerda

Az UnsupportedOperationException ereje - hogyan írok új kódot?


Egy fejlesztés alatt álló rendszerben tipikus fejlesztői attitűd az, hogy a kódot alulról felfelé írjuk. Mennyire jellemző dolog is ez:
  1. Csinálok egy osztályt, mert arra majd szükségem lesz;
  2. Csinálok egy metódust, amit majd valamikor meghívok: nagyjából tudom a paramétereit is, akár miért ne írhatnám meg már most is, ha tudom, hogyan kell működnie?;
  3. Felviszek pár mezőt is az osztályba, merthát az adatokat valahol tárolnom is kell;
  4. Rájövök arra is, hogy az osztály valamilyen asszociáción keresztül más osztályokkal is kapcsolatban áll, ha már erre járok, ezt is megcsinálom.
  5. GOTO 1. (Valójában az 1-4. pontokat szabadon, tetszőleges sorrendben alkalmazhatom.)

Hogy hol ér véget a folyamat, azt nem tudni. Az eredmény garantált: nagyon nehézkesen haladok a kóddal, ide-oda kapkodok, és fogalmam sincs, hányadán állok az egész problémával. Ha már tudatos refaktorálónak is érzem magam, akkor tovább bonyolítom a helyzetemet azzal, hogyféligmeddig itt-ott megírt programrészeket alakítgatok. Jó esetben ez a fajta hozzáállás konvergál egy működő (de nem feltétlenül jó) kódhoz.

Szerintem tudod, miről beszélek :)

Vannak olyan ismerőseim, akik a hétköznapi beszéddel is képesek ezt produkálni. Megvan bennem minden jóindulat irányukban, de egy idő után elfáradok: nem tudom, hol kezdtük, merre tartunk, és már fáj a fejem az egésztől.

Hogyan lehet ezt másképpen csinálni?


Amikor új kódot kezdek írni, arra törekszem, hogy először megírjam a hozzá tartozó tesztet. A teszt során állandóan abba a problémába fogok ütközni, hogy olyan metódusokat akarok meghívni, amik még nem léteznek. Semmi gond: a kedvenc IDE-met használva a nem létező metódus fej részét létrehozatom, és a belsejébe automatikusan (Javaban) egy "throw new UnsupportedOperationException();"-t íratok. (C#-ban "throw new NotImplementedException();"-t írok.)

Visszatérek a tesztemhez, és tovább folytatom, amíg nem végzek vele. Amikor futtatom a tesztet, futás közben látom, hogy mik azok a metódusok, amelyeket elfelejtettem megírni, és ezeket pótolom.

Ez a módszer akkor is alkalmazható, ha épp nem tesztből indulok ki, a lényeg, hogy fókuszált maradjak. Nem szabad engedni a kísértésnek, hogy kizökkentsem magam az aktuális gondolatmenetemből. A kódban elhelyezett "bombáim" garantálják, hogy ne felejtsek el később semmit. A fegyelmezettség megéri: mivel mindig egy dologgal foglalkozom, és egy szemszögből nézem a problémát, mindig jobban végig tudom azt gondolni, és ráadásul rövidebb idő alatt is végzek.

Ha többen dolgozunk egy kódbázison, akkor az exception dobásakor egy szöveget is megadhatunk, ami utal arra, hogy az a saját bombánk. Ezáltal könnyen megkereshetjük a kódban (futtatás nélkül is) a félretett gondolatfoszlányainkat.

A probléma ezen megoldása felülről lefelé megvalósítást tesz lehetővé. Tudom, hogy mit szeretnék elérni, a megvalósítás pedig már "részletkérdés".

Címkék:

0 megjegyzés:

Megjegyzés küldése

Megjegyzés: Megjegyzéseket csak a blog tagjai írhatnak a blogba.

Feliratkozás Megjegyzések küldése [Atom]

<< Főoldal