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

1、引言

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

java ddd聚合,DDD(五)--集合、聚合根_第1张图片

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

2、为什么要聚合呢

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

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

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

3、聚合的特性

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

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

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

4、小结

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

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

你可能感兴趣的:(java,ddd聚合)