采用DDD开发信息发布系统(五)不是想象的那样


本来我想做DDD-NODE框架,但是发现不太可能,所以我分理出了能够简化开发的东西。

Repository 中能做的就是事件机制和一些约定规范。

Entity 能做的也是事件机制和一些约定规范。


Repository用node.js 开发完成了,下面给出代码,具体代码略。


function Repository(){}

var repo = Repository.prototype;

repo.on = function(id,event,listener){}

repo.once = function(id,event,listener){}

repo.emit = function(id,event){}

repo.removeListener = function(id,event,listener){}

repo.removeAllListener = function(id,event,listener){}

module.exports = Repository

下面是Entity代码


function Entity(){
this._repo = ... ; // Repository 实体对象
}

var e = Entity.prototype;

e.on = function(event,listener){
this._repo.on(this.id,event,listener);
// 内部调用仓储的监听,一下略
}

e.once = function(event,listener){
// ... 略
}

e.emit = function(event){
// ... 略
}

e.removeListener = function(event,listener){
// ... 略
}

e.removeAllListener = function(event,listener){
// ... 略
}

使用方法如下:

比如我们需要监听一下 Info 的被更改的事件。


var id = ...
// 第一种方法
infoRepo.on(id,'change',function(info){})
// 第二种方法,我们得到info的情况下
info.on('change',function(info){})

如果要监听全部的info中,只要有info改变就激发事件,那么只有一种方式。


infoRepo.on("*","change",function(info){})

而Repository内存优化和具体的实现这个就只能交给程序员了,当然也许不是这样,我再想一想。


[该贴被brighthas于2012-07-14 09:26修改过]