name: clean-architecture description: 基于Robert C. Martin书籍的Clean Architecture原则和最佳实践。此技能应用于设计软件系统、审查代码结构或重构应用程序,以实现更好的关注点分离。触发涉及层、边界、依赖方向、实体、用例或系统架构的任务。
清洁架构最佳实践
基于Robert C. Martin的《Clean Architecture: A Craftsman’s Guide to Software Structure and Design》的全面指南,用于设计可维护、可测试的软件系统。包含8个类别中的42条规则,按架构影响优先级排序。
何时应用
参考这些指南当:
- 设计新的软件系统或模块
- 结构化层之间的依赖关系
- 定义业务逻辑和基础设施之间的边界
- 审查代码以检测架构违规
- 将耦合系统重构为更清晰的结构
按优先级分类的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 依赖方向 | 关键 | dep- |
| 2 | 实体设计 | 关键 | entity- |
| 3 | 用例隔离 | 高 | usecase- |
| 4 | 组件内聚 | 高 | comp- |
| 5 | 边界定义 | 中高 | bound- |
| 6 | 接口适配器 | 中 | adapt- |
| 7 | 框架隔离 | 中 | frame- |
| 8 | 测试架构 | 低中 | test- |
快速参考
1. 依赖方向(关键)
dep-inward-only- 源依赖仅指向内部dep-interface-ownership- 接口属于客户端而非实现者dep-no-framework-imports- 避免内部层导入框架dep-data-crossing-boundaries- 跨边界使用简单数据结构dep-acyclic-dependencies- 消除组件间的循环依赖dep-stable-abstractions- 依赖于稳定抽象而非易变具体实现
2. 实体设计(关键)
entity-pure-business-rules- 实体仅包含企业业务规则entity-no-persistence-awareness- 实体不得知晓如何持久化entity-encapsulate-invariants- 在实体中封装业务不变量entity-value-objects- 为领域概念使用值对象entity-rich-not-anemic- 构建丰富的领域模型而非贫血数据结构
3. 用例隔离(高)
usecase-single-responsibility- 每个用例只有一个变更原因usecase-input-output-ports- 为用例定义输入和输出端口usecase-orchestrates-not-implements- 用例编排实体而非实现业务规则usecase-no-presentation-logic- 用例不得包含表示逻辑usecase-explicit-dependencies- 在构造函数中显式声明所有依赖usecase-transaction-boundary- 用例定义事务边界
4. 组件内聚(高)
comp-screaming-architecture- 结构应突出领域而非框架comp-common-closure- 将一起变更的类分组comp-common-reuse- 避免强制客户端依赖未使用的代码comp-reuse-release-equivalence- 将组件作为内聚单元发布comp-stable-dependencies- 依赖方向指向稳定性
5. 边界定义(中高)
bound-humble-object- 在架构边界使用谦逊对象bound-partial-boundaries- 当完全分离过早时使用部分边界bound-boundary-cost-awareness- 权衡边界成本与无知成本bound-main-component- 将主组件视为应用程序的插件bound-defer-decisions- 推迟框架和数据库决策bound-service-internal-architecture- 服务必须具有内部清洁架构
6. 接口适配器(中)
adapt-controller-thin- 保持控制器精简adapt-presenter-formats- 呈现器为视图格式化数据adapt-gateway-abstraction- 网关隐藏外部系统细节adapt-mapper-translation- 使用映射器在层之间转换adapt-anti-corruption-layer- 为外部系统构建防腐层
7. 框架隔离(中)
frame-domain-purity- 领域层零框架依赖frame-orm-in-infrastructure- 将ORM使用保持在基础设施层frame-web-in-infrastructure- Web框架关注点保留在接口层frame-di-container-edge- 依赖注入容器位于边缘frame-logging-abstraction- 将日志记录抽象在领域接口后
8. 测试架构(低中)
test-tests-are-architecture- 测试是系统架构的一部分test-testable-design- 从一开始就设计为可测试test-layer-isolation- 隔离测试每个层test-boundary-verification- 用测试验证架构边界
如何使用
阅读单个参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则的模板 |
| metadata.json | 版本和参考信息 |