文档章节

关于聚合设计与cqrs

本然
 本然
发布于 2015/05/17 22:32
字数 669
阅读 84
收藏 2
记得在去年的时候,也就是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
AxonFramework简介

Axon是一个轻量级框架,能够帮助开发者通过在架构层面构建可扩展和可伸缩的应用。(注:以DDD面向领域驱动设计为基础的CQRS框架) Axon Framework背景、发展简史 随着时间的发展,软件的需求也...

耒耒耒耒耒
2017/10/13
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

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 教程:在 Confluence 中导航

当你对 Confluence 有所了解后,你会发现 Confluence 使用起来非常简单。这个教程主要是针对你使用的 Confluence 界面进行一些说明,同时向你展示在那里可以进行一些通用的任务和操作。 空间...

honeymose
今天
2
0
sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部