代码组织 - DDD 六边形架构
Hyman 2022/2/16 探索实践总结Go
一提到代码组织,想必大家第一个印象便是分层,分层的带来的好处是什么:
- 隔离不同关注点。高层关注业务逻辑、低层关注基础设置
- 隔离业务复杂度与技术复杂度
- 提高复用
- 降低耦合
分层的原则是什么?
- 层次越高,越面向业务、用户
- 层次越低,越通用,面向设备
- 封装变化。层之间解耦,将各层的影响降到最低
对于分层架构中层次的界定,Martin Fowler给出了一个判定的方法,就是如果把表示层换成其他实现,如果和原来的表示层有重复实现的内容,那么这部分内容就应该放到业务逻辑层
传统的分层,我们会将系统分为表示层、业务逻辑层以及数据访问层:
- 表现层 - controller:json、xml等
- 逻辑层 - service:业务逻辑
- 数据访问层 - dao:orm 、关系型数据库
注:Common或Utility,提供共用或通用方法或行为的支持
对于传统分层有什么特点:
- 层依赖下层。下层不能依赖上层。
- 适合逻辑简单的服务(CRUD),比如:直接提供对数据库增删改查,简单的信息管理
- 数据为中心,数据驱动
- 无法适应复杂业务多维度依赖
随着某些核心业务的访问量发展,通常我们需要去进行优化的措施,比如加缓存,加MQ,换数据源
另外,核心业务的复杂程度不断提高,数据驱动开始显得有些力不从心,需要能有跟好方式进行代码组织 - DDD的出现很好的解决了复杂性的问题,开启了从以数据为中心向基于任务的设计转变的过程,目前比较成熟的架构架构风格有:洋葱架构、干净架构、六边形架构,以六边形架构为例,整体组织架构如下:
- 内层业务逻辑
- 外层依赖内层
- 左边向右边驱动
- 外层为驱动逻辑、基础设施或其他应用
它的特点是:
- 解决了业务逻辑和表示层代码交错的问题
- 前端需求多变,核心领域稳定
- 用例和流程会随外部需求随时调整
- 不同的客户通过"平等"的方式与系统交互
- 六边形架构也称为端口与适配器