Od jednostavnog do kompliciranog i nazad
- Posted in:
- Quick thoughts
Potaknut Ayendeovim blog postovima vezanim za arhitekturu, DDD, i projektiranje strukture aplikacije, nekako osjećam potrebu napisati par riječi.
Poruka koja se proteže kroz gotovo sve Ayendeove postove je uvijek ista, a govori o jednostavnim rješenjima za jednostavne probleme, i kompleksnim za kompleksne probleme. Bilo kakva drugačija kombinacija nije dobra, naravno, i logično!
Northwind starter kit je samo jedan u nizu primjera kako rješenje za 2+2 napisati u obliku SIN(4)^2 + COS(4) ^2 + SQRT(9). Svako toliko kada tražim primjer za neki problem, pattern, funkciju, skinem projekt sa codeplexa ili nekog drugog repozitorija, otvorim ga u Visual Studio, i čudim se kako su uspjeli napisati toliko linija koda za izvući jedan redak iz baze, ubaciti toliko layera apstrakcije i interfaceova. Takvi primjeri, koji su pretpostavljam namijenjeni za učenje, davanje savjeta i dobrih praksi, vjerujem da samo u manjem dijelu i zadovoljavaju tu svoju svrhu, ali u većem dijelu čine kontra-efekt, i udaljavaju "čitatelja" od dobivanja korisnih znanja.
Iz vlastitog iskustva mogu opisati kako sam godinama samo tražio priliku za ubaciti dodatne klase u projekt koje bu služile kao repozitorij, service layer, application layer, pa još neki kvazi-BLL layer, zamjenjivi ORM framework, pa sve to odvojiti u posebne projekte, i neka komuniciraju preko web servisa i SOAP protokola, jer tko zna kakva će biti produkcijska infrastruktura. A radi se o aplikaciji za spremanje brojeva telefona, ili evidencije radnog vremena. U stručnoj literaturi znano kao najobičnija CRUD aplikacija. Ali trebalo je isprobati sve patterne od Martin Fawlera (PoEAA) i Eric Evansa (DDD)!
Kvaliteta koda se prvo očituje u njegovoj jednostavnosti da riješi zadani problem. Odmah poslije toga bi postavio pridržavanje SOLID principa, jer su oni direktno vezani za dobar objektni dizajn - što u prijevodu govori u lakšem održavanju, izmijeni i testiranju. A sve to iziskuje puno rada, truda, učenja, ali i mijenjanja i preispitivanja vlastitih sudova. Mislim da ću si odmah napisati na stick-it notes "jednostavno i solid-no", i zalijepiti ga na monitor, da ne zalutam previše:)