
整洁架构 —— 深度参考基于 Robert C. Martin 的《整洁架构》2017。当需要依赖方向、层次和边界的详细标准时使用。依赖规则依赖只向内指向。中心的代码实体、用例不得依赖外层圆圈中的代码UI、DB、框架。外层圆圈依赖内层圆圈内层圆圈定义接口外层圆圈实现它们。违规用例从 Express、Django 或具体仓库实现导入。正确用例依赖接口如OrderRepository外层的适配器实现它并使用 Express/DB。层次由内向外实体—— 企业业务规则。跨应用适用的普通结构和规则。不依赖框架或 UI。用例—— 应用业务规则。编排实体并定义应用特定工作流。只依赖实体以及用于 I/O 的接口仓库、展示器。接口适配器—— 在用例与外部世界之间转换数据。展示器、网关、控制器将外部格式与用例格式互相转换。依赖用例并且只能通过用例依赖实体。框架与驱动—— Web 框架、DB 驱动、消息、文件 I/O。实现用例或接口适配器定义的接口。向内依赖。边界边界 内层代码依赖、外层代码实现的接口或抽象类型。好的边界使切换实现变得容易例如测试用内存仓库生产用 SQL 仓库。在有理由变化或替换的地方划定边界不同的持久化、不同的 UI、不同的传输。此语境中的 SOLIDSRP—— 每个模块类/包只有一个变更理由一个参与者。例如如果报告格式化和报告计算因不同原因变化就将它们分开。OCP—— 通过接口的新实现新适配器扩展行为而非编辑现有用例或实体代码。LSP—— 仓库或网关接口的任何实现都必须可替换而不破坏用例。ISP—— 小而聚焦的接口例如如果读和写演进方式不同用ReadOrderRepository和WriteOrderRepository而非一个臃肿的OrderRepository。DIP—— 用例依赖OrderRepository接口组合根注入SqlOrderRepository。高层策略不依赖低层细节。依赖反转无反转用例直接导入并调用SqlOrderRepository→ 用例依赖 DB。有反转用例依赖OrderRepository接口SqlOrderRepository实现它并在边缘注入。用例保持独立于 SQL。组件内聚与耦合用于较大系统将类分组为组件模块、包时Uncle Bob 定义内聚REP复用/发布等价—— 复用的单元即发布的单元将一起复用和发布的分组。CCP共同闭包—— 因相同原因变化的类属于同一组件减少变更影响。CRP共同复用—— 一起复用的类应打包在一起避免强制依赖者拉入超出所需的内容。耦合ADP无环依赖—— 组件依赖图必须无环。SDP稳定依赖—— 朝稳定方向依赖较不稳定的组件依赖较稳定的组件。SAP稳定抽象—— 稳定组件应该是抽象的不稳定组件可以是具体的。在讨论超越单层的模块/包边界时使用。完整论述见《整洁架构》Martin2017。在审查依赖方向、层次违规或缺失边界时使用此参考。