核心不是“六边形”
核心是建立一道明确边界:内部保存业务意义,外部承担技术事实。六边形只是为了提醒我们:外部世界可以从任意方向接入。
Port 是业务自己的话
OrderStore、PaymentGateway 描述“业务需要什么”,不能叫 JpaRepository、KafkaProducer 这类技术名字。
Adapter 是翻译官
它可以知道 Spring、MyBatis、Kafka、S3、第三方 SDK;它把这些现实技术翻译成 Port 所定义的业务契约。
整个六边形架构中的参与者,可以归为五类
它们共同围绕一个目标协作:让数字世界中的业务逻辑,不直接依赖现实世界中的技术实现。
Domain 保持业务规则纯粹,Application 组织业务用例,Ports 定义边界契约,Adapters 负责跨越边界做技术翻译,而 UI、数据库及外部系统则存在于边界之外。
- Domain(领域 / 业务逻辑):位于架构最核心的位置,表达业务本身的规则、概念和约束。它回答的是“业务是什么、规则是什么”,不关心数据来自 HTTP、数据库还是消息队列。
- Application(应用服务):负责组织和协调一个完整的业务用例。它驱动 Domain 完成业务行为,并通过 Port 使用外部能力,但自身不承载数据库、网络协议、SDK 等技术细节。
- Ports(端口):数字世界与现实世界之间的边界契约。输入端口描述“系统能够提供什么能力”,输出端口描述“业务核心需要外界提供什么能力”,两者都使用业务语言表达。
- Adapters(适配器):边界两侧的“翻译器”。它把 HTTP、SQL、MQ、文件、第三方 SDK 等现实世界的技术语言,转换成 Port 所定义的业务语言,或者反向转换。
- 用户界面(UI)和外部系统:属于现实世界,包括用户、Web/API 客户端、数据库、消息系统、文件存储和第三方服务等。它们不会直接进入业务核心,而是始终通过 Adapter → Port 与核心发生交互。