用途:六边形架构(端口与适配器)用于隔离应用核心与外部系统。核心定义接口(端口),外部系统提供实现(适配器),从而便于替换实现并通过 mock 进行测试。
主要能力与模式:端口由应用核心拥有,而非基础设施;适配器实现核心定义的接口;通过构造函数注入,在应用入口(组合根)完成装配。端口分为主端口(驱动端口,由核心暴露、被适配器调用,如 HTTP 控制器、CLI 调用用例)与次端口(被驱动端口,由核心定义、由基础设施实现,如 IUserRepository 由 PostgresRepository 实现、IEmailService 由 SendGridEmailService 实现)。前端同样适用:在功能内定义端口,用 fetch/axios 实现,测试时替换为 mock。
使用方式:在应用层定义端口接口;在基础设施层编写实现该接口的适配器;在组合根注入具体适配器;测试时注入 mock。核心不得导入基础设施具体实现,应依赖接口。
适用场景:需要脱离真实数据库、邮件或外部 API 进行测试;需要替换基础设施(如 Postgres 换 MySQL、SendGrid 换 AWS SES);同一端口需要多个适配器(REST + CLI + GraphQL);业务逻辑需与框架细节隔离。
限制与注意:不适用于无测试需求的简单 CRUD、仅单一外部依赖的脚本或原型。端口粒度需注意,过多小端口会导致端口爆炸,应合并相关操作。共享领域类型可跨层但只能向内移动,适配器负责与领域类型互转。可部分采用,无需完整 Clean Architecture。资料未提供安装命令、收费与平台信息。