Všichni jste už asi slyšeli o Spring IoC, Picocontaineru, HaveMindu či Tapestry IoC. Ale což takhle IoC pro JavaScript?
Ano je to možné. Jmenuje se Squirel Ioc. Jedná se o velmi jednoduchou knihovna, která má 4kB a používá jQuery.
Použití je velmi jednoduché (jak už se v mých příspěvcích stalo pravidlem). Máme následující třídy, které budeme propojovat:
function MyModel(){
//obsah třídy MyModel
}
function MyDAO(model){
var _model=model;
this.get = function() {
return _model;
}
this.save = function() {
//uloz
}
this.delete = function() {
//smaz
}
}
function MyService(){
var _dao = null;
this.get = function() {
return _dao.get();
}
this.getDao = function() {
return _dao;
}
this.setDao = function(dao) {
_dao = dao;
}
}
function MyApp(){
var _service=null;
//rikame IoC containeru, ze az vse nastavi, ma zavolat metodu onContextSupport
ContainerSupport.call(this);
this.onContextSupport = function(containerContext){
var model=_service.get();
//udelej cokoliv dalsiho s hodnotou ...
}
this.setService = function(service){
_service = service;
}
}
Z pohledu IoC v Javě máme POJO objekty a teď je potřebuje spolu nějak svázat (ve Springu se k tomu např. používá xml soubor nebo anotace). Při použití Squirrel IoC nám poslouží velmi jednoduchý kód:var definition={
'model':{type:MyModel},
'dao':{type:MyDAO,args:[{ref:'model'}]},
'service':{type:MyService,props:[{name:'dao',ref:'dao'}]},
'app':{type:MyApp,props:[{name:'containerContext',ref:'containerContext'},{ref:'service'}]}
};
var container = new IContainer();
container.load(definition);
V příkladu je vidět constructor injection (na příkladu definice dao
objektu) či setter injection (na příkladu objektu service
).Když to funguje v Javě, proč ne v JavaScriptu. Opět se ukazuje jednoduchost, kterou nám JavaScript jako dynamický jazyk nabízí. A příště až budete potřebovat propojit pár objektů mezi sebou, zamyslete se, zda vám Squirrel Ioc neusnadní práci.
Žádné komentáře:
Okomentovat