Zadnjh dana sam nešto dobro volje da dijelim svoje znanje, pa evo još jedna topla preporuka za koju sam primjetio da mnogi ljudi, na njihovu štetu, ne rade.
Pravite svoje warppere!
Što je warrper? Pa warpper je u suštini jednostavni komad code-a koji se prevlači preko neke postojeće funkcije …i u prvu ruku nema potrebu niti mijenjati neku bitnu logiku nad tom funkcijom koju smo “presvukli”.
Recimo, imamo nativnu console log funkciju:
console.log("Hello World");
Ajde da ju warpamo:
function log(x){
console.log(x)
};
…u prvu ruku ovo izgleda svušno, ali nije. To je zlato programiranja.
Zašto? Zato što je warpper ujedno i controller. Razmislimo malo o riječi controller što ona znači dok se pojavljuje u razno raznim frameworcima?
Pa controller je kao što sama riječ kaže, centralna točka kroz koju prolazi svaki upit, svaki request …pa kako imamo tu centralnu točku, onda imamo i dobru kontrolu nad svakim upitom koji prolazi kroz controller.
Tako i ovdje, ako radimo nativni console.log kroz naš controller, to će nam omogućiti da možemo tipa po želji zagasiti odjednom sve logove:
function log(x){
return;
console.log(x)
};
Ok, to i nije neki best-light kodiranja, jer ne želimo konfigurirati stvari tako da mijenjamo meso funkcije.
Ali zato, dodavanjem optionalnog parametra u naš warper:
function log(x, opt){
return;
console.log(x)
};
Dobivamo totalno jednu fleksibilnost da imamo logove koji se mogu prikazati samo u offline radu, samo u online radu…itd itd. Možemo razviti logove koji su bindani uz neki custom_name, pa onda imati kontrolu tipa:
turnOnLogsForName(someName)
//ili
turnOffLogsForName(someName)
…pa nam je na taj način praktično isključivati/uključivati cijele sekcije logova…itd. Kako bi se reklo, jednom kada nabacimo kontrolu nad nekom funkcijom, samo nebo je granica što će naša mašta u suradnji sa našom potrebom od toga kontrolera napraviti.
Nadalje, velika prednost toga je i u tome što ako poželimo ispis logova preusmjeriti sa nativnog console.log-a na neki drugi sistem logiranja, to opet činimo samo na jednom mjestu, unutar controllera:
function log(x){
some_custom_log_engine(x)
};
Vrlo vrlo praktično i poštuje DRY pravilo na najnižoj mogućoj razini. Od kuda i treba krenuti, ako želite punu konrolu nad svojim programima.
Console.log je jednostavna funkcija pa i ne traži nužno svoj controller, ali što je funkcija kompleksnija, postaje bitni imati i dobru kontrolu nad njom, recimo vue …uzeti kontrolu nad njim je opet sasvim trivijalno:
var bVue = function(vueCreatorObject){
var vue = new Vue(vueCreatorObject);
return vue;
}
I ono što je divno, ako ovaj pristup nadograđujete nakon što xx vremena koristite vue, ovo vam neće uzeti puno vremena za prilagodbu postojećeg, samo trebate izmjeniti:
var vueApp = new Vue(someObject);
//u:
var vueApp = new bVue(someObject);
//s time da sada smijete pisati i skraćeno:
var vueApp = bVue(someObject);
A što ćete napraviti u konačnici sa vue controllerom, neka bude vaša mašta. Vidjet ćete kada zauzdate kontrolu, da će vam nebo biti granica.
Ja sam si recimo napravio da mogu direktno iz vue-templatea pozivati i funkcije koje su globalne, a ne samo one koje su definirane u vue.methods.
Nadalje, napravio sam si event koji se trigira i na vue.mounted i na vue.updated , jer takav event nisam pronašao u originalnoj dokumntaciji, mada možda i postoji …tko zna. Dok ga ja nađem, već davno sam napravio svoj.
Kako god, često sam se našao da ponavljam neki code unutar vue.mounted i vue.updated i trebao mi je event koji se izvršava na ta obadva trigera.
Kao što rekoh, nebo je granica.
A sada da odmah doskočim hejterima za koje već znam kako će komentirati ovaj moj savjet.
Reću ću vam ovo… Pitaju mene moji radnici da kako se ja usudim tako pipat po nativnim metodama i samo širiti svoje libriry-e …itd. itd. Kao što nebi bilo jednostavnije da se samo koristi nativna sintaksa i tako to…
A ja njima na to odgovorim: “Morate se usuditi mijenjati svijet! Zato jer se ja usudim…zato sam ja vama šef, a ne vi meni.”
Još jednom warpperi su zlato. Warpperi daju jednu veliku controlu, fleksibilnost i stabilnost nad održavanjem i razvojem programa.
I idu niz dlaku najbitnijem načelu programiranja, koje je DRY načelo.
Nadalje, kada shvatite koncept warppera, koncept normJS-a će vam biti nijansu bliži. Zato jer normJS će se nadviti većinom kao warpper nad postojećim modelima koji već postoje diljem svijeta…samo da premapira ulazne i izlazne varijable po standardu koji će normJS propisati. A kakvo će biti meso ispod toga warppera, koji će odrađivati suštinu posla…moći će biti isti modeli koje sada ekipa razvija i koristi. Samo warpano za normJS standard.
Cherrs.
Btw. ova znanja su omogućena by “Techno Angels” …i cijeli koncept normJS-a oni guraju, ja sam samo kanal koji dobro prati gradivo.