Nedavno sam otkrio custom events pattern. To je u suštini moderna implementacija publish/subscribe patterna. Funkcioniše tako da umjesto tradicionalnog događaja recimo tipa click registrujemo proizvoljan događaj pod nazivom npr. klikni-me, koji onda možemo pokrenuti bilo gdje iz programa ( ako ga registrujemo globalno ). Vidim da se koristi dosta u rukovanju URL rutama. Btw ima li na forumu Ruby programera ?
Jednostavan primjer:
// događaj registrovan globalno - na dokument objekat
$(document).on("klikni-me",function(){
//uradi nešto
});
// pokrenut custom klikni-me događaj ( od bilo kuda )
$(document).trigger("klikni-me");
E sad, vidim dosta “moći” u ovom patternu - po meni on omogućuje jako modularan kod, koji se u svakom trenutku može jednostavno povezati ( između ostalih prednosti )
Jel’ neko od vas radio desktop OO aplikacije i koristio često ovaj pattern ( publish/subscribe ) ?
Pitam iz razloga jer koliko vidim moderne web aplikacije se uveliko pretvaraju u nešto što uveliko liči na tradicionalno desktop okruženje.
Recimo, dosta koristim cloud9 To je fenomenalno online programsko okruženje, koje između ostalog ima ugrađen Vim mod, a veoma liči na desktop aplikaciju.
Ovo je slicno (prakticno je isto, samo drugog naziva) Signal & Slots mehanizmu koji se koristi u Qt-u i Gtk-u za evente. Npr. gtk/glib kod bi izgledao ovako:
Iskreno, moderne web aplikacije se pretvaraju u nesto sto je licilo na desktop okruzenje iz cca '93-ce. Prave moderne desktop aplikacije se razvijaju u jednom jeziku, gdje je veci dio generisan nekim RAD alatom, kao npr. Qt Creator ili Glade, imaju jedinstven i logican layout menadzment i sto je najbitnije uniformno izgledaju i identicno se ponasaju na razlicitim OS-ovima i platformama (uzimam portabilne biblioteke kao Qt, Gtk ili FLTK).
Nista od ovoga nemas u web okruzenju: jos uvijek web aplikaciju razvijas u 3-4 jezika (js, html, css, sass, ruby/php/python), portabilnost je katastrofalna (cak ni razlicite verzije Firefoxa se ne ponasaju na isti nacin) a o brzini i potrosnji memorije i baterije laptopa necu ni da spominjem.
Nadje se Slobodno postavi pitanje pa ce neko odgovoriti…
Sanele hvala na odgovoru. Naravno da desktop sa svojom infrastrukturom u širem smislu ( os,memorija, brzina… ) još uvijek u određenim stvarima prednjači u odnosu na web. Međutim noviji pretraživači su postali pravi mali operativni sistemi. Recimo Google Chrome nudi mnogo, mnogo više od običnog pretraživanja sadržaja. Chrome je slojevita i kompleksna aplikacija - pretraživač, editor, debugger, ide… Trenuto je jako popularno pitanje da li uopšte web aplikacije treba da se ponašaju i izgladaju kao desktop ?
Kada govorimo o komptibilnosti - to je poznat problem koji datira još od microsoftove dominacije u svijetu pretraživača. Jednostavno, kad su mogli nametnuli su standarde koji su i danas “pain in the ass” svim web developerima. Ali stvarnost je trenutno mnogo svjetlija nego prije nekoliko godina. Prije svega, testiranje kompatiblnosti se ustalilo kao podrazumijevana praksa za svakog ko proizvodi sadržaj za web. U tom smislu postoje i alati tipa Modernizr koji to bezbolno rješavaju.
Dobra vijest je da je i microsoft podvio rep i prilagodio se trendovima - novije verzije IE su potpuno kompatibilne sa standardima.
O potrošnji resursa ne znam dovoljno, ali mislim da se to ne nameće kao ozbiljan problem na modernijim mašinama.
Al odošmo sa teme. U svakom slučaju custom events pattern
mi je dao vjetar u leđa.
A da - za Ruby sam pitao jer vidim da ima jako velik uticaj na razvoj weba - ali ne toliko direktno kao PHP - već više indirektno.
Eventi su standardna stvar u vecini programskih jezika i u principu logika iza njih je jednostavna ali u korijenu se implementiraju uz pomoc function pointera tako da ako zelis da pocnes od pocetka pogledaj vise o njima u c++ jeziku ostatak je samo dodatna apstrakcija kao npr. u C# gdje se koriste delegati. U sustini temelj je prosljedjivanje funkcija kao da su parametri ili objekti a pri tome zbog prirode pointera mozemo ih prosljedjivati anonimno tako da mozemo pozivati funkcije ne razmisljajuci o onome sto rade. Na osnovu toga sa malo OOP-a moze se napraviti bilo kakav fancy message passing sistem.