Dojo Toolkit - wprowadzenie
Tworząc część kliencką wszelkiej maści aplikacji, dość często wykorzystuje się JavaScript i różnego rodzaju biblioteki i narzędzia oparte na nim. Osobiście jestem przeciwnikiem korzystania z “jedynej słusznej” technologii (jaka by ona nie była) i lubię eksperymentować z nowymi narzędziami. Ostatecznie nawet papier toaletowy wie, że należy się rozwijać. Tym razem postanowiłem się trochę mocniej wgłębić w bibliotekę Dojo, która prawdopodobnie jest w stanie zastąpić wiele innych bibliotek, które dotychczas wykorzystywałem.
Jedną z największych zalet stosowania Dojo jest modularność i zarządzanie zależnościami. Biblioteka składa się z całego mnóstwa modułów, których liczbę można rozszerzać o własne i wstrzykiwać w zależności od potrzeb. Ponadto zarządzanie zależnościami opiera się o AMD, czyli asynchroniczne ładowanie zależności, co ułatwia pisanie samodzielnego i wydajnego kodu bez potrzeby dołączania ogromnej liczby skryptów, które koniec końców, nie zawsze zostaną użyte. Składnia jest tożsama z tą wykorzystywaną przez RequireJS i inne tego typu biblioteki:
require(["moduleFirst", "moduleSecond", "moduleThird"],
function(moduleFirst, moduleSecond, moduleThird) {
moduleFirst.doSomething();
moduleSecond.doSomething();
moduleThird.doSomething();
});
Chcąc uniknąć zduplikowanego kodu, przydaje się możliwość rozszerzania istniejących klas, modułów itp. Dotychczas korzystałem przede wszystkim z Underscore.js oraz Prototype.js, okazuje się jednak, że Dojo jest w stanie całkiem zręcznie zastąpić je:
define(["dojo/_base/declare", "example/Person"], function(declare, Person) {
return declare(Person, {
doSomething: function() {
return console.log("do something...");
}
});
});
Bardzo ciekawą funkcjonalnością dostarczaną przez Dojo są aspekty. Przenoszą one na grunt języka JavaScript programowanie aspektowe, znane chociażby z AspectJ. Upraszcza programowanie zdarzeniowe i sprawia wrażenie prostego w użyciu:
define(["dojo/aspect"], function(aspect) {
aspect.after(module, "method", function(argFirst, argSecond) {
console.log("do something with " + argFirst + " and " + argSecond);
});
});
Oczywiście nie brakuje również wsparcia dla modelu danych oraz zunifikowanego obiektu XHR do obsługi żądań AJAX.
Dojo zapewnia sporo dodatkowych narzędzi wspierających pracę:
- D.O.H. - platformę wspierającą testy jednostkowe i wydajnościowe,
- system budowania Dojo - pozwalający m.in. na minifikację kodu wynikowego, kopiowanie zasobów, skanowanie zależności i raportowanie procesu budowania,
- Dijit - bibliotekę UI z pokaźnym zestawem widżetów,
- oraz dużo innych ciekawych udogodnie, których wymienianie nie ma większego sensu, a które dobrze opisuje dokumentacja.
W najbliższym czasie postaram się zgłębić temat poszczególnych elementów Dojo i napisać o nich coś więcej.