关于聚合设计与cqrs

记得在去年的时候,也就是14年下半年的时候,那个时候第一次系统得学习领域驱动设计。在此之前,从《企业应用架构模式》中对领域驱动的设计,有所耳闻,并自己瞎摸索实践了,有大概一年。

后来,啃《领域驱动设计》一书,对其中的构件有了一些系统的了解,但是,仍然缺乏经验。当时,用面向对象设计的原则来划分聚合,用四分法来划分聚合,查cqrs,其实都感觉有些无力。经过两三个小项目的磨合,对其中的一些坑和原则,已有一些体会。直到后来,啃了《实现领域驱动设计》。书中对各种设计进行了相当详细的描述,并有代码示例,但是,却觉得书中说的并不尽然。此时,我们已经对领域驱动设计,其中构件的使用,有了相当的自己的理解。但是,总觉得哪里味道不对。

记得曾经查cqrs架构时,查到一个架构用二进制序列化对象,严格得仅用ID进行聚合加载。当时,我们其实很想用这个架构,但是,存在两个问题。

1、如果聚合结构变了,数据怎么处理

2、如果我想通过非ID查询聚合怎么处理

其实,主要矛盾还是第一条。

当时,我们还在用c#,看似,这个问题是无解的,所以就没有继续了。

这个问题,一直困扰我到了今天。

而,就在今天,突然想到,聚合,为什么会变。聚合,是用来执行业务的。业务的执行,在聚合中,引发,聚合的变化,而所有的查询数据,均和聚合结构无关。

所以,当聚合的职责,足够单一,它基本上是不会发生变化的。

而,当我们想要加什么东西时,会做的,是增加聚合,需要改变业务时,要做的,是修改领域服务,聚合,是相当稳定的存在。

所以,《实现领域驱动设计》中,才会推荐在一个事务中仅操作一个聚合吧。因为,聚合,支撑业务操作,其他操作都会用领域事件触发。

而反思这点,所有的查询,均使用领域事件同步的数据,业务数据不可被查询,仅可被当做聚合,在聚合被加载的时候使用

那么似乎,我们的架构,在向纯粹的cqrs方向发展。

来自为知笔记(Wiz)

时间: 2024-10-29 19:08:48

关于聚合设计与cqrs的相关文章

ddd 聚合根 之 聚合与不聚合 设计

聚合 不聚合 订单和订单明细 论坛主贴与贴子回复 订单和收货地址(vo)  

SSAS 聚合设计提升CUBE的查询性能(转载)

Problem What exactly are SQL Server Analysis Services (SSAS) Aggregations and how exactly can I review and use them? Solution Aggregations in SSAS offer a wonderful opportunity to improve query performance and calculation times by "pre aggregating&qu

IDDD 实现领域驱动设计-一个简单的 CQRS 示例

上一篇:<IDDD 实现领域驱动设计-CQRS(命令查询职责分离)和 EDA(事件驱动架构)> 学习架构知识,需要有一些功底和经验,要不然你会和我一样吃力,CQRS.EDA.ES.Saga 等等,这些是实践 DDD 所必不可少的架构,所以,如果你不懂这些,是很难看懂上篇所提到的 CQRS Journey 和 ENode 项目,那怎么办呢?我们可以从简单的 Demo 一点一滴开始. 代码地址:https://github.com/yuezhongxin/CQRS.Sample 说明:一张很丑陋的

如何运用领域驱动设计 - 聚合

原文:如何运用领域驱动设计 - 聚合 目录 概述 何为聚合 演化案例 发现实体关系 开始划分边界吧 选取一个聚合根 通过聚合根保护你的内部对象 聚合的一些特性 通过ID引用 聚合真的是不变的吗 小的聚合 一致性 总结 概述 在前几篇的博文中,我们已经学习到了如何运用实体和值对象.随着我们所在领域的不断深入,领域模型变得逐渐清晰,我们已经建立了足够丰富的实体和值对象.但随着实体和值对象的数量逐渐增多,它们之间的关系也显得越来越复杂:实体A与实体B存在一对一的关系,实体B又与实体C存在一对多的关系.

DDD领域驱动设计基本理论知识总结

领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD.领域驱动设计分为两个阶段: 以一种领域专家.设计人员.开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型:由领域模型驱动软件设计,用代码来实现该领域模型:

浅谈12306 核心模型设计思路和架构设计

春节期间,无意中看到一篇文章,文章中讲到12306的业务复杂度远远比淘宝天猫这种电商网站要复杂.后来自己想想,也确实如此.所以,很想挑战一下12306这个系统的核心领域模型的设计.一般的电商网站,购买都是基于商品的概念,每个商品有一定量的库存,用户的购买行为是针对商品的.当用户发起购买行为时,系统只需要生成订单并对用户要购买的商品减库存即可.但是,12306就不是那么简单了,具体复杂在哪里,我下面会进一步分析. 另外一个让我写这篇文章的原因,是我发现也许是否是因为目前12306的核心领域模型设计

浅谈12306核心模型设计思路和架构设计

前言 春节期间,无意中看到一篇文章,文章中讲到12306的业务复杂度远远比淘宝天猫这种电商网站要复杂.后来自己想想,也确实如此.所以,很想挑战一下12306这个系统的核心领域模型的设计.一般的电商网站,购买都是基于商品的概念,每个商品有一定量的库存,用户的购买行为是针对商品的.当用户发起购买行为时,系统只需要生成订单并对用户要购买的商品减库存即可.但是,12306就不是那么简单了,具体复杂在哪里,我下面会进一步分析. 另外一个让我写这篇文章的原因,是我发现也许是否是因为目前12306的核心领域模

CQRS 示例

CQRS 示例 上一篇:<IDDD 实现领域驱动设计-CQRS(命令查询职责分离)和 EDA(事件驱动架构)> 学习架构知识,需要有一些功底和经验,要不然你会和我一样吃力,CQRS.EDA.ES.Saga 等等,这些是实践 DDD 所必不可少的架构,所以,如果你不懂这些,是很难看懂上篇所提到的 CQRS Journey 和 ENode 项目,那怎么办呢?我们可以从简单的 Demo 一点一滴开始. 代码地址:https://github.com/yuezhongxin/CQRS.Sample 说

ENode 2.6 架构与设计简介以及全新案例分享

前言 ENode是一个应用开发框架,为开发人员提供了一整套基于DDD+CQRS+ES+EDA架构风格的解决方案.ENode从发布1.0开始到现在,我几乎每周都在更新设计或实现代码.以至于从来没有一个稳定的版本可以提供给大家,非常惭愧.但我相信,随着时间的推移和我的努力的积累,ENode一定会越来越稳定和成熟的.我觉得我此刻很幸福,因为我有自己的兴趣且有机会为了自己的兴趣而奋斗. ENode开源地址:https://github.com/tangxuehua/enode 今天是个开心的日子,因为我