3.15 Go微服务实战(微服务理论) --- 领域驱动设计的Go语言实现
Posted enlyhua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.15 Go微服务实战(微服务理论) --- 领域驱动设计的Go语言实现相关的知识,希望对你有一定的参考价值。
第15章 领域驱动设计的Go语言实现
15.1 聚合模式介绍
实体(entity):可以持久化存储的对象
值对象(value object):值集合的对象,比如"钱"这个值对象包括"币种"和"金额"两个值的集合
工厂(factory):负责初始化对象的对象或方法
储存库(repository):用于访问entity,同时封装了访问数据库的方法
服务(service):用于实现不属于entity也不属于value object的业务逻辑
DDD中有2个非常重要的模式:聚合(Aggregate)和聚合根(AggregateRoot)。
1.聚合是对概念上同属于同一实体或者值对象的封装。
2.聚合根的含义是指,任何对该聚合的访问都仅到达聚合根。
15.2 使用聚合模式
为什么在微服务的业务逻辑设计中需要使用聚合,有2个原因:
1.聚合强调高内聚,除了聚合根意外都无法被外部访问,这样可以避免任何跨服务边界的对象使用;
2.因为单个事务只能更新单个聚合,因此可以满足微服务的事务模型约束,单个聚合可以实现ACID,同时也可以支持分布式事务。
15.2.1 聚合拥有明确的边界
聚合是一个确定边界内的领域对象的集合,可以将其视为一个整体。聚合由一个聚合根和一个或者多个其他实体或值对象组成。
之所以聚合有明确的边界,就是为了增加内聚,所以聚合代表了一致性。
15.2.2 聚合的规则
1.只有聚合根可被外部访问
2.聚合之间的联系通过主键编码而不是引用
3.单个事务只能创建或更新一个聚合
15.2.3 聚合颗粒度
若聚合较小,无疑会提升数据加载和更新的速度,而且因为聚合比较小也就降低了多个外部请求同时访问同一个聚合的概率;可是聚合太小又会
让分布式事务非常复
以上是关于3.15 Go微服务实战(微服务理论) --- 领域驱动设计的Go语言实现的主要内容,如果未能解决你的问题,请参考以下文章
3.13 Go微服务实战(微服务理论) --- 微服务中的进程间通信
3.16 Go微服务实战(微服务理论) --- Go语言基于ES-CQRS的微服务实践
3.16 Go微服务实战(微服务理论) --- Go语言基于ES-CQRS的微服务实践