domain object 调用 repository 与 eventStore


我正在编写CQRS-NODE框架,下面我把 domain object 和 repository / eventStore交互的实现方式和大家分享一下,希望各位批评指正。



// 查询代码
repository.findById(id,callback)



// repository你内部内含玄机
function findById(id,callback){

// IF : 内部先判断cache中是否有这个对象,如果有直接返回cache中的对象。

// ELSE : 如果没有,监听 loaded event.
this.addListener('loaded id01',callback);

// 然后调用 event store 的 getSnapshot 得到最新的Snapshot
eventStore.getSnapshot(callback);

// THEN : 用snapshot作为参数得到之后的 events。
eventStore.getEvents(shapshot,callback)

// THEN : 然后load 为一个真正的aggre object
var aggre = eventStore.load(Type,snapshot,events);

// 加入到cache中,并触发 loaded event 事件
this.cache[id] = aggreobj;
this.emit('loaded id01',aggreobj);

}

这种方式可以让系统的对象是内存唯一的。