採用cqrsnode框架開發的DDD CQRS例子

brighthas發表於2012-09-19
首先我們開發 Aggre 類 User

cqrsnode框架主頁https://github.com/brighthas/cqrsnode

// CQRSnode容器會讓User成為Aggre,但同時需要遵守一些編碼約定。
function User(){

        // Aggre 的自身狀態都儲存在 this._data 裡
	this._data.name = 'brighthas';
	this._data.email = 'brighthas@[author]gmail[/author].com';
	this.on('changeName',function(name){
		// 這個是監聽 changeName 事件,但這不是必須的
                // 這裡可以做一些事情,
                // 請不要在這裡更改自身狀態,內部產生事件會自動呼叫自身的 updateDate 方法
	})
}

// 這個靜態方法是必須的,用於構建,但不是應用層使用,而是倉儲使用。
User.create = function(){
 var user = new this('id003');
 return user;
}

User.prototype = {
        // 更改名字,是一個DDD方法
	changeName:function(name){
		var event = ['changeName',name]; // 建立個event
		this.publish(event);  // 釋出event
                // 當事件釋出時,會發布到事件匯流排上,同時會 store event to eventStore.
	},
        // 這個是更改Aggre狀態的, event 是事件,data是內部狀態。
        // 這個方法不能顯式呼叫,而是當有事件產生時會自動呼叫,用於更改其自身狀態。
	updateDate : function(event,data){
		switch(event.name){
			case 'changeName':
				data.name = event.data;
				console.log(123)
			break;
		}
	}
}
module.exports = User;
<p class="indent">

[該貼被brighthas於2012-09-19 08:41修改過]

[該貼被brighthas於2012-09-19 08:46修改過]

相關文章