採用DDD開發資訊釋出系統(五)不是想象的那樣

brighthas發表於2012-07-14

本來我想做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

<p class="indent">


下面是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){
	// ... 略
}

<p class="indent">


使用方法如下:

比如我們需要監聽一下 Info 的被更改的事件。

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

<p class="indent">


如果要監聽全部的info中,只要有info改變就激發事件,那麼只有一種方式。

infoRepo.on("*","change",function(info){})
<p class="indent">


而Repository記憶體最佳化和具體的實現這個就只能交給程式設計師了,當然也許不是這樣,我再想一想。


[該貼被brighthas於2012-07-14 09:26修改過]

相關文章