JdonFramework-6.6.6新版本发布
JdonFramework-6.6.6版本在原来成熟稳定的6.6.4版本上主要增加了对CQRS的command异步并发支持。
也就是说,原来聚合根实体模型发出的领域事件是通过异步并发的Disruptor输出,6.6.6版本增加了使用Disruptor进行异步并发的command输入,这样聚合根实体模型有自己的与外界进行异步无堵塞的输入输出通讯,更加完整,更类似Scala/Akka Erlang的Actors模型了。如下图:
关于Actors模型的好处见文章:http://www.jdon.com/45728
在Jdon框架中有两个模型: Component(组件) 和 Model(领域模型). 分别以@Component, 和 @Model 标注。
当一个Model被外部组件访问,它一般是DDD中的聚合根实体,因为根据DDD只有聚合根实体才能被外界访问引用,外部不能直接访问聚合边界内其它对象,必须通过聚合根,这样聚合根才能保证聚合边界内各个对象变化的一致性。
如果一个Model被其他领域模型引用,它就肯定不是聚合根,因为聚合根之间不能直接相互引用,它可能是聚合内一个对象,或者是实体或者是值对象。
领域模型Model实例生活在in-memory内存缓存中, 而组件Component实例的生命周期是应用级别,比如和Web容器相同,一个容器内缺省是一个单例。
Component能够用来实现DDD的服务service或其他应用管理器,如邮件发送等。
Jdon框架也提供一种类似Component的Service类型 (标注为@Service),它是面向外部客户端,而不是面向内部,可用来实现SOA的粗粒度大服务。
Jdon在这两个模型(Component和Model)之间提供四种异步并发的通讯方式,也是一种Producer/Consumer模式。
1.组件和模型 Component -----> model
2. 模型和组件 model ------->Component
3. 组件与组件 Compponent ------> Component
4. 模型与模型 model------> model
当一个组件或服务Component/Service发送消息给领域模型Model(也就是聚合根aggregate root), 在CQRS中我们称这个消息携带的是命令command, 当一个领域模型model发送消息给组件Component, 我们称它为事件,代表已经在领域模型中发生什么事情::
关于这四个方式如何具体实现,可见:http://www.jdon.com/jdonframework/cqrs.html
另外推荐道友@tangxuehua 的在.net上实现的CQRS框架:enode框架,两者可合并一起参考: http://www.cnblogs.com/netfocus/p/3179060.html
[该贴被banq于2013-09-24 07:56修改过]