Subscribe

Leaky abstraction

U svakodnevnoj komunkaciji često koristimo termine da bismo poboljšali timsku komunikaciju i verujemo da ako ste imali prilike da pročitate članak o dizajn paternima znate koja je korist od njihovog korišćenja.

Jedan od takvih termina je i Leaky abstraction.

Kad krenete u razvoj novog projekta ili menjate postojeći sigurno ste došli u situaciju da uradite refaktoring kôda sa ciljem da poboljšate dizajn uvođenjem neke apstrakcije kako biste sakrili detalje implementacije.

Ipak, ponekad se dešava da bez obzira  na našu nameru da sakrijemo detalje, desi nam se da klijenti (korisnici naših klasa) moraju znati nešto i o samoj imlementaciji.

Evo nekoliko primera:

  • TinyMCE editor omogućava unos i formatiranje teksta i na taj način nas “oslobađa” od toga da znamo HTML, stilove i sve ono što bismo inače morali da znamo kada je formatiranje teksta u pitanju. Međutim da li je tako? Ukoliko koristite npr. WordPress alat za pisanje teksta, sigurni smo da ste došli u priliku da dodatno formatirate tekst jer editor ne daje očekivani razultat što vas je primoralo da otvorite karticu Text i upišete HTML kôd.
  • NHibernate je ORM (Object Relation Mapper) koji je zapravo apstrakcija pristupa bazi. Međutim ako naiđete na problem da rezultat upita koji ste izvršili ne daje očekivane podatke morate pogledati detalje implementacije. Ovo se takođe odnosi i na to da ukoliko imate potrebu da dodate dopunske funkcionalnosti
  • ASP .NET Web Forms od nas programera apstrakuje način na koji web funkcioniše. Međutim ukoliko naiđemo na problem u prikazu ili funkcionalnosti naše stranice moraćemo u jednom trenutku da istražimo i implementacione detalje kako apstrakcija funkcioniše.
  • Bili ste sigurno u situaciji da pravite framework, sa ciljem da izdvojite zajedničke funkcionalnosti, koje se koriste kroz celu aplikaciju (npr. logovanje, sigurnost itd…) i na taj način “sakrijete” implementacione detalje od ostalih članova tima koji logger u pozadini koristite ili kako se neki fajlovi učitavaju (npr. ako imate bootstrapper ili autoloader). Međutim, dešava se nekad da i oni zakažu, u manjoj ili većoj meri, gde je potrebno da programer istraži zašto je do toga došlo.

U osnovi the Law of Leaky Abstraction je:

Sve netrivijalne apstrakcije, u izvesnoj meri su propustljive.

Da li to znači da ne treba da koristimo apstrakciju i da je ona nepotrebna?

Apsolutno NE. Bez apstrakcije, naše klase bi bile međusobno zavisne što bi u mnogome otežalo održavanje koda.

Ovaj tekst smo napisali sa ciljem da se veći broj čitalaca upozna sa terminom a pre svega da i pored naše namere da sakrijemo implementacione detalje, ipak su nekad potrebni. Sa tim u vezi dokumentovanje u kodu ili nekom drugom tehničkom dokumentu koji prati implementaciju može biti od velike koristi ne samo drugima već i nama jer će nam služiti kao podsetnik trenutne ideje koja nas je vodila u toku implementacije. Umesto da tumačite kako nešto da uradite, sigurni smo da će biti lakše pročitati dokument gde ste posebnu pažnju posvetili na odluke koje ste doneli pišući ga, tj. zašto je implementacija urađena kako je urađena.

Ovaj termin prvi je upotrebio Joel Spolsky u svom tekstu koji možete pročitati ovde.

Leave a Reply