随笔分类 - Tiny Library CQRS
介绍CQRS架构实践案例Tiny Library CQRS的设计与实现
摘要:在上一篇文章中,我给出了一个完整的CQRS架构的演示案例:Tiny Library CQRS。本文将介绍该案例中AOP拦截的实现方式,以及基于AOP拦截的异常处理。由于Tiny Library CQRS是基于Apworks框架开发的CQRS架构案例,因此通过本文你也将了解到,如何配置Apworks框架以便在自己的实际项目中使用AOP拦截和异常处理。实现AOP拦截如上所述,Tiny Library CQRS利用了Apworks框架实现AOP拦截,那么首先来了解一下Apworks支持AOP拦截的方式。Apworks采用Castle DynamicProxy实现AOP拦截,因此针对AOP拦截部分的开
阅读全文
摘要:如果您不了解CQRS架构中各个系统或组件是如何组织在一起并协调工作的,或者您不了解CQRS架构中事件溯源、快照、领域仓储、消息派发、消息同步等是如何实现的,或者您甚至不了解什么是领域驱动设计、什么是事件驱动架构(Event-Driven Architecture)以及什么是CQRS架构(Command-Query Responsibility Segregation Architecture),那么本文,以及Tiny Library CQRS实践案例,就是您正需要的。Tiny Library CQRS(http://tlibcqrs.codeplex.com)是基于.NET与Apworks(h
阅读全文
摘要:领域仓储(Domain Repository)与事件存储(Event Store)是CQRS体系结构应用系统中C部分(Command部分)的重要组件。虽然都是存储机制,但两者有着本质的区别:领域仓储是属于领域层的,而事件仓储则是属于基础结构层的。领域模型产生事件,领域仓储负责保存、发布事件,并通过事件序列重塑领域模型。由于领域仓储的存在,使得“内存领域模型(In-memory Domain)”成为可能。在上文中我已经对对象的状态做了一些介绍,通过这些介绍我们能够了解到,在应用系统中,是领域事件导致了对象状态的变化,于是,我们只需要把这些领域事件按顺序记录下来,我们就有能力将领域模型还原到任何.
阅读全文
摘要:从结构上看,tlibcqrs项目并不复杂,但对其进行介绍,的确让我感到有点无从着手。还是先从领域模型中的对象的行为和状态谈起吧。先来谈谈对象状态。据我理解,状态就是一种数据,它用来描述,在某个特定的时间上,这个对象所具有的特质,它将作为对象行为发生的依据和结果。我们平时做设计和编程的时候,尤其是在做数据访问层的时候,特别喜欢一些仅仅包含getter/setter属性的对象,以便调用方能够通过getter获得对象的状态,使用setter设置对象的状态。之前我也说明过,状态并非getter/setter属性,在OOP上,状态表现为“字段”(fields)。现在我们讨论的不是数据访问层的DAO,而是
阅读全文
摘要:写在前面也许在阅读了上篇文章中我列出的那部分资料后,还是有很多朋友对领域驱动设计不了解。正如上文评论中有网友提到微软西班牙团队也做了一个面向领域的分布式应用系统架构的案例,地址是http://microsoftnlayerapp.codeplex.com/。在这个站点的首页上,又对领域驱动设计做了诠释,我觉得总结的很好,特地将其翻译成中文写在这里,供大家参考:DDD is much more than this!We're talking about complex apps…, all their business rules (Domain logic) are points th
阅读全文
摘要:写在前面有段时间没有更新博客了,一方面因为工作繁忙,另一方面则是我最近一直在坚持设计和完善基于DDD的应用系统开发框架Apworks。读过我《领域驱动设计案例:Tiny Library》这一系列文章的朋友一定听说过Apworks框架,虽然这个框架至今仍未成熟到能够用在真正的系统开发上,但它已经实现了CQRS体系结构模式,已经可以用于软件架构设计的演示上了。从这一讲开始,我将逐步介绍如何采用CQRS架构实现Tiny Library的业务。你可能会听得烦了:又是Tiny Library,能不能换点别的?呵呵,我开始时想做一个简单的论坛出来,不过为了能让读者朋友在经典DDD实践和CQRS实践上做个对
阅读全文