前言:六边形架构又称“端口适配器架构”,实际上也是一种分层架构,只不过由上下或者左右变成了内部与外部。其核心理念就是应用通过端口与外部进行交互的。核心的业务逻辑(领域模型)与外部资源(数据库等资源)完全隔离,仅通过适配器进行交互,解决了业务逻辑与用户数据交错的问题,很好的实现了前后端分离。
困惑:
- 在分层架构中是否困惑过某些逻辑处理或某些数据处理该放在哪一层?
- 在分层架构中是否困惑过该分多少层?
- 在分层架构中是否困惑过平层和跨层调用是否合理?
六边形架构
Alistair Cockburn 提出了一种具有对称特征的架构风格。在这种架构中,不同的客户通过平等的方式与系统交互。
比如HTTP客户,MQ客户,它们平等对系统提供输入。Redis和DB也平等的提供输出。每个客户都拥有自己的适配器,去理解输入,比如gin、iris、echo就是http的适配器。
那么内部是业务系统(领域模型),外部就是输入和输出的适配器。重心放在内部业务逻辑上,隔离输入和输出。如果非要用分层来理解,那么六边形分为内层和外层。
Alistair Cockburn 提出的六边形是有Application和Domain的,但现在微服务体系下Application已经没有存在的必要了,一个微服务就是一个Application。
落地的六边形架构图
那么六边形和DDD的结合是如何应对上述困惑的。所有数据处理全部由repository适配成实体,逻辑都是领域服务、聚合、实体的行为。分多少层和平层、跨层调用本身也不存在。