cqrs-node 框架的进展

大家好,我是利奥。最近开发了一个node.js版本的CQRS框架。开发流程如下,请各位批评指正。这个版本成熟后会发布。

我们用 cqrs -c myapp 创建一个开发目录,自动会创建如下目录
aggres
entites
repositories
factories
eventHandles
还有 commands / commandHandles / queries / queryHandles 目录,这四个目录我们先不加入内容

我们先开发 aggres/Product.js 文件

aggres/Product.js 主要代码如下:


product.changeName = function(name){
// 创建一个事件
var event = new Event('changeName',{name:name});
// 发布事件
this.publish(event);
}

// 当changeName事件产生时会触发这个监听器
product.onchangeName = function(event){
this._name = event.data.name;
console.log('hello cqrs!');
}

eventHandles/ProductchangeName.js 代码如下:


// 这里有个约定,就是监听器的名字要 aggre name + event name
function ProductchangeName(event){
console.log(event.data.name);
}

下面是测试启动文件 Test.js


var myproduct = repository.findById(id,function(err,p){
p.changeName('summer sex');
})

打印结果是:
hello cqrs!
summer sex


[该贴被brighthas于2012-07-27 23:08修改过]
[该贴被brighthas于2012-07-27 23:09修改过]

Command 和 Command handle的编码如下:

One: commands/ChangeNameCommand.js


function ChangeNameCommand(name){}

Two: commandHandles/ChangeNameCommandHandle.js


function ChangeNameCommandHandle(command){ // 领域代码 }

调用代码:


var command = new cqrs.commands.ChangeNameCommand("summer");
commandBus.execute(command);


[该贴被brighthas于2012-07-31 08:32修改过]

整个CQRS的结构已经初具模型,现在问题的关键是JS的异步事件实现机制上面,我刚刚看到一份JS的异步开源类库:jscex(相关文章:专访Jscex作者老赵),不知楼主对其有什么看法?我个人感觉它是拓展了语言库,就像我曾经看到国内有人专门为机顶盒浏览器做JS拓展库一样。
[该贴被banq于2012-07-30 14:43修改过]

2012-07-30 14:41 "@banq"的内容
整个CQRS的结构已经初具模型,现在问题的关键是JS的异步事件实现机制上面 ...

jscex不错,它基本上不干扰JS本身的编程方式,由于JS本身的灵活性,让通过JS库扩展语言本身成为可能。

可以不用造轮子,直接用jscex解决异步的一些问题。

jscex比step好很多,jscex不破坏JS本身编程方式可以控制异步的流程了。

[该贴被brighthas于2012-07-31 00:25修改过]
[该贴被brighthas于2012-07-31 08:27修改过]


在调用代码中,我们需要创建 Command 对象,同时需要赋予它一个callback,用于得到command结果的POJO。


var command = new cqrs.commands.ChangeNameCommand("summer");
command.callback = function(pojo){
//结果处理代码};
commandBus.execute(command);



[该贴被brighthas于2012-07-31 08:31修改过]