随笔分类 -  [01] CQRS实践系列

摘要:前几篇随笔中讨论了CQRS中的Command,本篇随笔中将讨论CQRS中的领域事件(Domain Event)。概念先回顾下CQRS中一个UI操作的执行过程:首先,用户在UI中点击一个按钮,继而UI层构造了一个相应的Command对象并放到CommandBus中执行,在Command的执行过程中,领域模型中的类和方法得到调用,而领域事件,正是在此时产生的,之所以称之为“领域”事件,也正是因为它产生于领域模型。这可以用下面这张图来说明(先忽略UnitOfWorkContext):从上图也可以看出,领域模型的调用被“包裹”在Command的执行上下文中,所以,UI层的所有操作都只是创建Comman 阅读全文
posted @ 2012-05-24 00:31 水言木 阅读(7079) 评论(22) 推荐(2) 编辑
摘要:上篇随笔讨论了CQRS中Command的一种基本实现。面对UI中的各种命令,Controller会创建相应的Command对象,然后将其交给CommandBus,由CommandBus统一派发到相应的CommandExecutor中去执行,我们的ICommandBus的接口声明如下:public interface ICommandBus{ void Send<TCommand>(TCommand cmd) where TCommand : ICommand;}当在实际项目中应用CQRS时,我们会发现上面的做法存在一个问题:有时候我们希望Command在执行完后返回一些结果,但上面 阅读全文
posted @ 2012-03-29 22:43 水言木 阅读(6931) 评论(16) 推荐(5) 编辑
摘要:概述继续引用上篇文章中的图片(来源于Udi Dahan博客),UI中的写入操作都将被封装为一个命令中,发送给Domain Model来处理。我们遵循Domain Driven Design的设计思想,因此所有的业务逻辑都只在Domain Model中处理,Command中将不会带有业务逻辑。Command中的代码无非是通过Repository获取某些个聚合根(Aggregate Root),然后将操作委托给相应的领域对象或领域服务来处理,仅此而已。实现实现上,我们会涉及三个东西:(1) Command对象Command对象的作用是用来封装命令数据,所以这类对象以属性为主,少量简单方法,但注意这 阅读全文
posted @ 2012-03-28 09:01 水言木 阅读(11378) 评论(8) 推荐(9) 编辑
摘要:什么是CQRS?这个问题网上可以找到很多资料,未接触过的童鞋请先查看Udi Dahan, Grey Young,Rinat Abdullin,园子里dax.net,以及Jdon社区上的相关文章。例如下面几篇文章:1.http://www.cnblogs.com/daxnet/archive/2011/01/06/1929099.html1.http://www.udidahan.com/2009/12/09/clarified-cqrs/2.http://www.jdon.com/jivejdon/thread/37891这里只通过Udi Dahan的《Clarified CQRS》文章中的一 阅读全文
posted @ 2012-03-23 09:52 水言木 阅读(37806) 评论(27) 推荐(22) 编辑