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:)
Comments
Ayende, kak su mu i rekli tamo, nije skužio svrhu i posve je promašio cilj. U poslednje vrijeme je dost nabrijan na ekipu oko sebe. Valjda skuplja bodove za guranje Ravena.
motokultivatorPoanta projekta s CodePlexa nikako nije bila prezentacija CRUD aplikacije, već kompleksnije arhitekture. Northwind je uzet samo i samo zato kaj nebi imalo smisla izmišljati novu baz i nove podatke.
Kak sam već rekao, nije mu prvi put da je promašio temu u blog postu, pogotovo u poslednje vrijeme.
Kaj se tiče tvoga zaključka, narafski da nećeš "komplicirati" ako ne trebaš, ali ako će ti trebati nekada servisna arhitektura, upotrebit ćeš ju, ako će ti trebati promenjivi ORM, koristit ćeš repozitorije, ako namjeravaš TDD-ati, također ćeš koristit repoe. Ak nećeš, nitko ti ne kaže da ne možeš sve potrpati u kontrolski OnClick.
Slažem se s tobom, barem u jednom dijelu;)
hudoAli kakav je smisao stavljati kompleksnu arhitekturu na jednostavan problem? To je poanta svih tih blog postova. Zato je on i krenuo objasniti kompleksan problem (Macto), od čega se kasnije i može dobiti kompleksna arhitektura, i po mom mišljenu to je "pravilniji" proces učenja.
Repozitorij pattern ima smisla, kao i svi ti drugi layeri i patterni (često ih koristim), ali samo u slucajevima gdje on donosi neku korist.