文档章节

关于聚合设计与cqrs

本然
 本然
发布于 2015/05/17 22:32
字数 669
阅读 83
收藏 2
点赞 0
评论 0
记得在去年的时候,也就是14年下半年的时候,那个时候第一次系统得学习领域驱动设计。在此之前,从《企业应用架构模式》中对领域驱动的设计,有所耳闻,并自己瞎摸索实践了,有大概一年。
后来,啃《领域驱动设计》一书,对其中的构件有了一些系统的了解,但是,仍然缺乏经验。当时,用面向对象设计的原则来划分聚合,用四分法来划分聚合,查cqrs,其实都感觉有些无力。经过两三个小项目的磨合,对其中的一些坑和原则,已有一些体会。直到后来,啃了《实现领域驱动设计》。书中对各种设计进行了相当详细的描述,并有代码示例,但是,却觉得书中说的并不尽然。此时,我们已经对领域驱动设计,其中构件的使用,有了相当的自己的理解。但是,总觉得哪里味道不对。
记得曾经查cqrs架构时,查到一个架构用二进制序列化对象,严格得仅用ID进行聚合加载。当时,我们其实很想用这个架构,但是,存在两个问题。
1、如果聚合结构变了,数据怎么处理
2、如果我想通过非ID查询聚合怎么处理
其实,主要矛盾还是第一条。
当时,我们还在用c#,看似,这个问题是无解的,所以就没有继续了。
这个问题,一直困扰我到了今天。
而,就在今天,突然想到,聚合,为什么会变。聚合,是用来执行业务的。业务的执行,在聚合中,引发,聚合的变化,而所有的查询数据,均和聚合结构无关。
所以,当聚合的职责,足够单一,它基本上是不会发生变化的。
而,当我们想要加什么东西时,会做的,是增加聚合,需要改变业务时,要做的,是修改领域服务,聚合,是相当稳定的存在。
所以,《实现领域驱动设计》中,才会推荐在一个事务中仅操作一个聚合吧。因为,聚合,支撑业务操作,其他操作都会用领域事件触发。
而反思这点,所有的查询,均使用领域事件同步的数据,业务数据不可被查询,仅可被当做聚合,在聚合被加载的时候使用
那么似乎,我们的架构,在向纯粹的cqrs方向发展。




© 著作权归作者所有

共有 人打赏支持
本然
粉丝 2
博文 18
码字总数 14597
作品 0
成都
程序员
初识EventSourcing和CQRS

初识EventSourcing和CQRS 无标题2017-06-2515 阅读 架构设计 EventSourcing就是事件溯源的意思,我们平时在设计系统的时候都存储了对象的最终的状态,比如一个交易订单,它当前的状态是等待买...

无标题
2017/06/25
0
0
为什么要使用MVC+REST+CQRS架构

具体来说,前端浏览器:angular.js等MVC框架;后端: REST+ CQRS。 angular.js等MVC框架是指前端浏览器的MVC框架,而不是类似Struts 或SpringMVC之类的服务器端后端MVC框架。 关于后端MVC框架...

天衣无缝
2013/08/09
0
0
关于领域驱动设计(DDD)中聚合设计的一些思考

原文:关于领域驱动设计(DDD)中聚合设计的一些思考 关于DDD的理论知识总结,可参考这篇文章。 DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/l...

杰克.陈
2017/12/05
0
0
JamesYeung/shriek-fx

ShriekFx A ddd-cqrs framework for .NET Core 2.0 that would make you shriek! For it's simple,elegant and useful! 一个使用 .NET Core 2.0 开发的简单易用的领域驱动设计分层框架(DDD......

JamesYeung
01/09
0
0
从CQS向CQRS演变

摘要:CQRS 是什么?它如何演变而来?文章从 CQS 的命令与查询讲起,再讲到命令总线,最后推出 CQRS 就是由 CQS、命令、查询和命令总线结合的产物。 一个以数据为中心的应用程序,它实现了基...

聊聊架构
2017/12/08
0
0
从Prism中学习设计模式之Event Aggregator 模式

Event Aggregator 模式定义:渠道事件从多个对象通过一个单一的对象来简化clients的注册。 结构图: Prism的Event Aggregator 模式:Event Aggregator允许多对象定位和发布、订阅事件。 我们...

andrewniu
05/29
0
0
CQRS/EventSourcing架构

引言 微服务架构现在很热,到处可以看到各大互联网公司的微服务实践的分享总结。但是,我今天的分享和微服务没有关系,希望可以带给大家一些新的东西。 如果一定要说微服务和CQRS架构的关系,...

无寄语
2016/09/12
92
0
浅谈命令查询职责分离(CQRS)模式

浅谈命令查询职责分离(CQRS)模式 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询 使用的是相同的实体。在一些业务逻辑简单的系统中可能没有什么问题,但是随...

AntMoon
2016/03/22
63
0
DDD CQRS 和 Event Sourcing 的案例:足球比赛

在12月11日新的有关DDD CQRS和Event Sourcing演讲:改变心态- 以更加面向对象视角看待业务领域建模中,作者以足球比赛football Match为案例说明传统编程方法和CQRS的区别。 CQRS作为DDD的最佳...

编走编想
2014/07/23
0
0
DDD CQRS和Event Sourcing的案例:足球比赛

在12月11日新的有关DDD CQRS和Event Sourcing演讲:改变心态- 以更加面向对象视角看待业务领域建模中,作者以足球比赛football Match为案例说明传统编程方法和CQRS的区别。 CQRS作为DDD的最佳...

暗之幻影
2014/12/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 基础 - 远程仓库的使用

远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某...

谢思华
7分钟前
0
0
面试宝典-悲观锁和乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。 乐观锁(Optimistic...

suyain
9分钟前
0
0
崛起于Springboot2.X之集成MongoDb使用mongoTemplate CRUD(27)

1、pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <groupId>log4j</......

木九天
19分钟前
0
0
切分log日志

新建logback.xml放到resource里面 <?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <......

talen
24分钟前
0
0
spring @Resource 和 @Autowired 的使用区别

这两个 注解 @Resource 和 @Autowired , 常识都知道 @Resource 是 JAVAEE 自带的,@Autowired 是 spring 的自定义注解。 一般情况下, 使用 bean的时候, 这两个注解 随便使用一个即可。 但...

之渊
29分钟前
0
0
springboot集成elasticsearch客户端问题记录

1背景说明 服务端ES版本为5.5.2,springboot版本为1.5.6。 工程中添加如下依赖 2问题记录 2.1 NetworkPlugin类找不到 报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.Net...

zjg23
31分钟前
1
0
快速构建ceph可视化监控系统

前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_expor...

万建宁
31分钟前
0
0
Java构造器使用注意

public class 父类A {int age = 10;protected void say() {System.out.println("父类A");}public 父类A() {override();}public void override() {Syst...

咸鱼AI
31分钟前
0
0
TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
35分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部