六边形架构(Hexagonal Architecture):目的是将输入输出放到设计的边缘.应用独立化,业务逻辑不依赖暴露rest或graphql api,数据来源可以是具体的数据库,外部微服务api,甚至一个文件.
主要是为了解决面向对象开发中,由于分层造成业务逻辑在不同层间耦合的问题.这个模式允许应用核心逻辑隔离外部系统.以实现核心逻辑修改不影响外部服务.
实际架构是以业务逻辑为核心,外层是数据源和传输层.
业务逻辑三个核心概念:
实体(Entities):是域对象(domain objects).不关心实际存储.
库(Repositories):负责与数据源交互和进行实体操作的接口.
交互器(Interactors):负责规划和执行域行为.可看作服务对象或用户实例对象.用于实现复杂的业务规则和校验域行为具体逻辑.
通过上面三个核心概念,定义业务逻辑时就不需要关心任何数据存储和业务逻辑触发的问题.因为具体存储使用实现存储接口的存储源;业务逻辑触发是外部服务主动请求.
业务逻辑之外是数据源(Data Sources)和传输层(Transport Layer):
数据源:适配不同的存储实现.实现业务逻辑和数据实现解耦
传输层:触发交互器去执行业务逻辑.将其看作业务系统的输入.常用的传输层是http api层和一系列处理请求的控制器.通过抽取业务逻辑到交互器,解耦特定传输层或控制器实现.交互器被触发不仅可以通过控制器,还可以是时间,定时任务,命令行等;
传统的层级架构,是上层直接依赖下层.而六边形架构中所有依赖全部在内部,核心业务逻辑不关心实际的传输层和数据源.但是,传输层知道如何使用交互器,数据源知道如何遵守库接口.
由于数据源和业务逻辑解耦,我们只要实现库接口定义,就能轻易的变更数据源实现.