Koliko modularan software treba biti?

Pozdrav,

Koliko modularan software treba biti tj. ako pišete aplikaciju pretpostavljam da ćete prije ili kasnije pri pisanju nove aplikacije uzeti dio koda iz one prethodne.

Koliko ste uredni? Da li ćete se potruditi jednom napisati savršen kod za recimo login i onda koristiti u svakoj svojoj aplikaciji svugdje isti kod uz minimalne preinake, (layout) ili ćete po potrebi kopirati dio po dio datoteke kako vam paše i pisati novi software za sebe?

Tako sam nekada mislio da moram napisati savršen code …i uvijek se ljutio na samog sebe što se nisam više potrudio kod inicijalnog pisanja nekog djela coda za određenu funkcionalnost.

Ali zapravo savršen code ne postoji :slight_smile: …tj. bio bi “beskonačno kompleksan”, jer sve stvari u ovom svemiru bi mogle beskonačno evoluirati ka svom savršenstvu.

Nema toga koji može predvidjeti svu potrebu koju će donest budućnost i da sve sroči “sada i ovdje”.

Npr. savršena stranica za login iz 2006-te godine nije mogla implementirati u sebi Facebook login, Gmail login …i slične kerefeke koje tada nisu postojale. …tako da nema smisla težiti savršenom codu, bitnije je težiti savršenoj strukturi.

Npr. uhvatit ću se opet stranice za login…i recimo da radimo na svakom novom projektu copy-paste stranicu za login. Smatram da kada se god radi copy-paste, da zapravo nešto griješimo, tj. vežemo si uteg za nogu. Ponekada taj uteg ima smisla tegliti, no ponekada nema. Treba svakako znati odvagnuti.

Zašto je problem copy-paste?
Sam čin copy-paste je kršenje DRY principa, koji kaže “Dont Repeat Yourself”.

Recimo da tom metodom naštancamo 100 projekata i tada poželimo malo moderinizirati tu stranicu za login? Moramo to onda najvjerovatnije pješke na svakom projektu doraditi… nije baš ugodno. (Ne moramo čak ni tada pješke, o tome malo kasnije…)

Ali ako smo strukturu logina napravili tako da lokaliziramo izvor tog code-a na jednom jedinom mjestu, onda ćemo samo evoluiranjem tog jednog djela codea moći upgrejdati sve naše projekte koji od tamo vuku login page.

Recimo, mogao bi se napraviti API koji puca HTML za login page…a onaj koji requesta taj API, parametrima će već definirati koji je background image za login page…koje sve funkcionalnosti želi imati na login pagu …itd.

I sada bi to nazvao da se posvetilo vrijeme strukturi/arhitekturi. Sada taj login page ne mora biti savršen, ali znamo da kada nam nešto pofali na tom login pageu, da ćemo samo u jednom centru to doraditi i da će nam se to preslikati na sve projekte koji vuku taj login page.

Drugi benefit je što se takav login page može brže implementirati na novim projektima…

Ovaj pristup naravno ima i svoje mane, a glavna mana je nedostatak fleksibilnosti. Jer kada neki novi projekt zatreba neku posebnu đinđu minđu na login pageu, on to više ne može jednostavno ubaciti, kao što bi se to jednostavno ubacilo u copy-pastean dio HTML-a za login page. Nego u ovom slučaju API segment mora evoluirati da bi tom novom projektu omogućio implemantaciju te custom đinđe minđe. Prilikom toga API-u raste kompleksnost, te uvijek mora biti backward-kompatibilan da ne naruši rad svih onih projekata koji se spajaju na taj API. A to ovisno od situacije može biti tricky.

I to je ono između čega treba odvagnuti kada se netko odlučuje na copy-paste. Kolika je potreba za fleksibilnosti? I mogli bi reći “kolika je serija” proizvodnje?

Jer ako neku funkcionalnost trebamo u velikim serijama, sa minornim razlikama od jedne instance do druge…onda uvijek treba lokalizirati “core” iz kojega nastaju te instance.
S druge strane, ako neku funkcionalnost trebamo u svega nekoliko instanci, koje će po mnogočemu biti različite, onda je praktičnije uzeti copy-paste nekakav template i po potrebi ga doraditi.

Sam login page nije problematičan, uzet je kao primjer…ali u praksi sam vidio da ljudi copy-paste metodom umnožavaju projekte koji su doslovice identične instance, samo se razlikuju po podacima.
I to sam vidio veliku firmu koja tako radi. :D. Znači, instanca programa za novog klijenta se radi tako da se uzme core program i napravi copy paste cijelog programa. I to lijepo funkcionira za 2-3 klijenta, no što kada bude 50, 100 klijenata? I kada zatreba neka modifikacija programa? :slight_smile:

Nadalje, preuzeo sam jedan projekt koji je tom metodom naštancao 100 copy-paste instanci, po jedna za svakog klijenta. Milina za radit u tome. :smiley: Ali i tu ima spasa. Konkretan program održavam tako da sam napravio program koji ga održava. :smiley: Tako da kada zatreba promjena u tom core-u koji je iskopiran u 100 komada, ja opet to mijenjam na jednom mjestu i onda program promjene preslikava na 100 različitih mjesta, koji su usto uploadani na različite hostinge…

Kada sam pravio taj program za održavanje, osjećao sam se da užasno bacam vrijeme…a sada mi toliko uštedi vremena da bi mi bilo nezamislivo bez njega…

…al svakako bi bilo najmanje bolno da je kreator tog programa u startu više vremena posvetio arhitekturi. :slight_smile:

1 Like