[Java教程]CQRS框架:AxonFramework 之 Hello World
0 2016-03-03 13:00:03
Command Query Responsibility Segregation,CQRS 这个架构思路好象最近博客园里讨论得比较多,有几篇园友的文章很有深度,推荐阅读:
CQRS架构简介
浅谈命令查询职责分离(CQRS)模式
DDD CQRS架构和传统架构的优缺点比较
比较有趣的是,以往一断谈及架构思路、OO思想这些,往往都是java大佬们的专长,而CQRS这个话题,好象.NET占了上风。园友汤雪华的ENODE开源大作,在github上人气也很旺。
于是,我逆向思路搜索了下java的类似项目,果然有一个AxonFramework,甚至还有一个专门的网站。按文档上的介绍,弄了一个hello world,记录一下:
CRQS是基于事件驱动的,其主要架构并不复杂,见下图:
简单来讲,对数据库的修改操作,UI层只管发送各种命令(Command),触发事件(Event),然后由EventHandler去异步处理,最终写入master DB,对于数据库的查询,则查询slave DB(注:这里的master db, slave db只是一个逻辑上的区分,可以是真正的主-从库,也可以都是一个库)。 这样的架构,很容易实现读写分离,也易于大型项目的扩展。
项目结构:
package的名称上大概就能看出用途:
command包定义各种命令,
event包定义各种事件,
handler包定义事件处理逻辑,
model包相当于领域模型
最外层的ToDOItemRunner相当于应用程序入口。
gradle依赖项:group 'yjmyzz'version '1.0'apply plugin: 'java'apply plugin: 'application'sourceCompatibility = 1.8repositories { mavenLocal() maven { url 'http://maven.oschina.net/content/groups/public/' } mavenCentral()}dependencies {