java ddd聚合,DDD(五)--集合、聚合根

本文阐述了领域驱动设计(DDD)中的聚合概念及其重要性,包括聚合的目的、特性及在微服务架构中的应用,旨在帮助读者更好地理解如何通过聚合简化系统架构并提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、引言

聚合,字面意思就很简洁明了,是把领域对象聚合在一起,并维护领域对象之间的关系。

137f98f1f6601fcd901e0e6bc6d56a76.png

聚合其实就是一个在不改变原有实体的情况下将若干实体聚集起来。

2、为什么要聚合呢

在开发中很多实体有着多个一对一,一对多的关联,聚合是为了尽可能减少这些关联,用做解耦合,也同时可以清晰的反应业务。

同时行外人士对系统的认知也是聚合,使用者不会考虑是用户还是订单,如果订单消失,那么保存这个订单的信息所在的意义微乎其微。

举个例子,实体用户、订单、商品组成一个聚合,这个聚合是为了表达用户与订单的关系的,用户购买商品生成订单,放在一个聚合内,订单是这个聚合根,订单中保存着用户id和商品id。可代入上图理解。

3、聚合的特性

上述例子是聚合吗?其实是存在问题的,如果商品涨价了,商品下架了,商品改名了用户看起来岂不是很迷惑?所以并不是随便几个实体就能组成聚合的,聚合要保证不变性和一致性,不变性我的理解是不会轻易改变,如果是聚合根自己改变的那当然是可以的,所以要保证一致性,在这个聚合内,无论怎么改变,必须是强一致的。

我认为聚合在代码内部的体现其实也是一个实体,甚至可以代表一个领域,但这不是说聚合是领域,准确来说领域可以是聚合,但是聚合不一定是领域。为什么聚合不一定是领域呢?如果有太多太多的实体组成一个聚合,那么这个聚合为了保证一致性和不变性是非常困难的,所以聚合要尽可能的设计的小。

聚合既可以表达一个领域,同时也可以表达边界,限制边界。

4、小结

现如今微服务广泛运用,所以我有一个疑问,在微服务架构中如何聚合。在网上看到这么一个例子用户购买电影票,需要同时访问用户微服务和电影微服务。如果让用户直接发请求给各个服务,那其中效率无疑是很低下的。但是可以用一种聚合微服务技术,手机发送请求给聚合微服务,聚合微服务再给电影和用户微服务发请求,再将电影票信息响应给用户。因为聚合微服务、电影微服务、用户微服务一般会在一个局域网内,所以效率会很高,不需要用户发送两个请求。

其实这就很好的解释了DDD中聚合这一概念。聚合的原因其一是为了提高效率,其次也能明确的表达某一业务。聚合在DDD中是非常重要的,因为DDD本身的思想就是针对业务,针对领域,这对使用和理解DDD都很方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值