关于CQRS中,对于一个领域对象的lock

CQRS让DDD的领域更加纯了,让真正属于领域的功能和query分离,这个非常不错。

我有个问题,当我从 repository get a aggre obj 时,如果业务有需求是否可以锁定这个对象的 find,等业务完成后,其他的command handle 调用 repository find才能得到这个aggre obj。

比如一个 command handle code:


function commandHandle(){
productRepo.findById(id,function(product){
// domain operation.
})
}

第一次执行 commandHandle() 时,得到了id那个 Product ,第二次commandHandle()时, 回调函数不会返回product,直到第一个handle完成后。

各位提出一些指教。


2012-07-22 21:00 "@brighthas"的内容
我从 repository get a aggre obj 时,如果业务有需求是否可以锁定这个对象的 find ...

当然可以,放在缓存内存(in-memory)中,以后每次访问这个 aggre obj,都首先从缓存中获得,如果缓存中没有,再到数据库获取。

这样,也节省了每次构成aggre obj这个复杂聚合根的开销。

函数式语言是排斥状态的,每次都争取亲历亲为不辞辛苦再做一遍,一是为了show自己无副作用的肌肉,二是挤压状态(命令式语言)的生存。呵呵
[该贴被banq于2012-07-23 13:40修改过]