我正在编写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);
}
|
这种方式可以让系统的对象是内存唯一的。