cqrsnode

cqrs framework for node.js

npm install cqrsnode
112 downloads in the last month

Note

publish version 0.1.0alpha , Please note this version is still too unstable.Need to wait for 0.2.0 stable version.

cqrsnode

CQRS framework for node.js

install

npm install cqrsnode 

create a app

cqrsnode appName

result is create dirs:
    Aggres | eventHandles | commandHandles | queryHandles | services

Aggre code example

    module.exports = User;

    function User(){

    }

    User.prototype = {
      // all update operating for .
        $updateState:function(){
            this.on('change name',function(name){
              this.data('name',name);    
            });

            this.on('change age',function(age){
                this.data('age',age);    
            })

            this.on('change',function(info){
                this.data('age',info.age);    
                this.data('name',info.name);    
            })
        },
        changeName:function(name){
            var e = ['change name',name];
            this.publish(e);
        },
        changeAge:function(age){
            var e = ['change age',age];
            this.publish(e);
        },
        changeUser:function(name,age){
            var e = ['change',{name:name,age:age}]    
            this.publish(e);
        }
    }    

    User.findByIds = function(ids,callback){
        ...
    }

    User.findByName = function(name,callback){
        ...    
    }

command handle example

module.exports = {

  'change user name':function(cmd,callback){
 var User = this.aggre('User')    
     User.get(cmd,id,function(u,next){
        u.changeName(cmd.name); 
            callback();
            next();
     })
  },

  'change user age':function(cmd,callback){
 var User = this.aggre('User')    
     User.get(cmd,id,function(u,next){
        u.changeAge(cmd.age); 
            callback();
            next();
     })
  },

    'transfer':function(cmd,callback){
       this.service(cmd.id1,cmdid2,cmd.money) 
    }

}

query handle example

module.exports = {

'same user':function(query,callback){
        var User = this.aggre('User');    
        User.findByIds(query.ids,callback)
    },

    'get a user':function(query,callback){
        var User = this.aggre('User');    
        User.findById(query.id,callback)
    }

}

event handle example

module.exports = {

'User.change name':[
 function(event){},
 function(event){}
],

    'User.change age':[
 function(event){},
 function(event){}
]
}

service example

module.exports = {
 'transfer':function(id1,id2,money){
             var User = this.aggre('User');     
            var user_1 = null;
            var user_2 = null;
            User.get(id1,function(u,next){
                user_1 = u;
                next();
                User.get(id2,function(u2,next2){
                user_2 = u2;
                next2();
                })    

         user_1.Outlay(money); 
                user_2.Income(money);

            })
     }    
    }
npm loves you