Benefiti DRY-a su pretpostavljam jasni, ovdje bi dopunio jednu misao oko DRY-a, koja bi rekla:
“Ako nešto ne može biti po DRY-u, onda mora biti standarizirano”
Tako recimo, <DIV>
tag moramo ponavljati svako malo…ali znamo da je to globalni HTML standard i nema problema s time što ponavljamo.
Isto tako, za bilo koju komponentu, koja je možda custom…ali globalno korištena…trebali bi imati neki standardni zapis, koji predstavlja njezin HTML code.
Po istoj logici, trebamo i standarne nazive metoda/propertija…kao što i DIV ima standarizirano div.innerHTML i sve ostale propertije…
Time smo znači rješili svu problematiku zbog koje inače poštujemo DRY princip, PLUS unjeli smo neke značajne prednosti.
Da, zato jer se standardi kreću pisati iz onog smjera kako bi nešto bilo najjednostavnije koristiti. A kako će iza tih metoda developer komponente riješiti da metoda obavlja svoj posao…to je njegov job i to nas ne zanima.
Jednostavnost korištenja dolazi na prvom mjestu kod kreiranja standarda.
Ali nismo standard uveli da bi pojednostavili nešto što bi inače developer možda zakomplicirao…nego zato da poznajemo jezik komponente prije nego ju vidimo. Da znamo s njom “pričati”.
Uz pretpostavku da standard zaista bude šire prihvaćen…dolazi do situacije da svi pričaju istim jezikom…i svi znaju kako će surađivati, bez proučavanja API-a …bez gubitka vremena na implementaciju…intiutivno već znamo za komponente koje prvi puta vidimo koji jezik govore…jer smo naučili sintaksu jezika.
Primjer toga ću pojasniti na metodama .show() i .close().
.
Znači, čim vidimo neku komponentu koja se po svojoj prirodi može paliti i gasiti, ne trebamo nigdje provjeravati u API-u da vidimo koje su metode za to.
(Intuitivno) već znamo da ju manipuliramo metodama show() i .close()
…ALI također znamo i koji su standarni parametri koje primaju te metode.
Tako recimo znamo kako ćemo pustiti tu komponentu da se ugasi uz njenu defaultnu animaciju gašenja, ili ćemo zahtjevati trenutno gašenje pozivom:
.close({animation:false})
…također po standardu znamo kako ćemo trigirati callback nakon gašenja…itd. itd.
Sve su to stvari koje se uvijek ponavljaju…bez iznimke. I zato ih je moguće standarizirati.
Dalje, osim što poznajemo jezik komponenti i lakše komuniciramo s njima bez stalnog gledanja u API …dešava se još jedna stvar, a to je: “modularnost”
Znači, tvoja komponenta A “priča” sa nekom drugom komponentom B po poznatom standarnom jeziku. U nekom momentu shvatiš da ti nije dobra ta komponenta B koju ćeš zamjeniti sa komponentom C.
Pošto komponenta C priča isti jezik, ti nemaš potrebe ulagati nikakav dodatni napor da ubaciš komponentu C na poziciju komponente B, dok god su obje komponente istog “type-a”.
No, ako na poziciju komponente B ubaciš komponentu D, koja čak nije istog type-a, opet će postojati veliki zajednički skup metoda komponente C i komponente D, zato jer iako su su C i D različitog typea …one su obje nikle na zajedničkom root typeu tj. imaju zajedničkog “pra-pra-pra-djeda”. Znači, moraju imati nešto zajedničko…kao što recimo čovjek i pas imaju zajedničko “dva oka, dva uha”. …i zaista i čovjek i pas se dobro snalaze u nekoj istoj okolini, jer su prirodno standarizirani za tu okolinu. No ako usko specijaliziramo okolinu, onda će u jednom momentu ta okolina postati ili prečudna za čovjeka, ili prečudna za psa.
Tako i ovdje, komponenta D zbog zajedničkih korjena djeli svašta sa komponentom C. I ti kao developer, u najmanju ruku si siguran i da komponenta D ima metode .show() i .close(), ukoliko je u njenoj prirodi da se upali/ugasi. Tako da će se možda komponenta D upotpunosti uklopiti na poziciju komponente C, iako nisu istog typea. A ako je pozicija baš jako specifična, onda ćeš eventualno morati raditi neku manju prilagodbu da pripašeš svoju komponentu A sa komponentom D.
Možda, možda ne. U svakom slučaju ništa manje jednostavne nego po trenutnom klasičnom načinu.
Sve što govorim ne oduzima ništa od trenutnog pristupa…samo daje jedan novi sloj na vrh. Što ne znači da bi nestali slojevi ispod, u kojima smo sad. Bili bi isti…ništa se nebi promjenilo. Tko nebi znao koristiti benefite standarda, njemu nebi ama baš ništa drugačije izgledalo. Ni trunku.
Ne…ovo nema puno veze sa tehnologijama. Kao što na početku rekoh…ovo je standard koji bi se ticao svih tehnologija koje su nikle nad javascriptom. Tako da bi se standard provodio na core javascript levelu…tako da bi ga mogle primjenjivati sve tehnologije koje su nikle nad javascriptom. Barem velika većina…moguće da nisam svjestan ako je neka tehnologija se nečim ograničila…al to je onda problem te tehnologije. Nemreš odstraniti od svog izvora
A što se tiče server strane…pa standarizirali bi se samo inputi i outputi koje bi komponente slale/primale sa servera. Tako da bi bilo nebitno što je na backend strani…da bi se moglo po standardu komunicirati sa komponentama.
I sve bi moglo biti pokriveno kvalitetno testovima, jer ako imaš standard…lako ga automatski i kontroliraš.
@krcmar , vidim ti me jedini kužiš, da li je ovaj post tebi razumljiv, ili sam opet nepovezano pretipkao misli? Popravi me slobodno ako sam što nejasan, bit ću zahvalan. Pogotovo dio sa čovjekom i psom sam sumnjiiv sam sebi jesam li bio jasan…a tamo se upravo skriva najveća čarolija…a graditelj svemir mi pokazuje da upravo tako gradi nas.