Clean Architecture中编排用例与核心用例的区分方案咨询
在Clean Architecture中区分核心用例与编排型用例的实践
在Clean Architecture体系下,你遇到的核心问题是如何隔离纯业务逻辑的可复用组件与处理外部请求的流程编排组件,避免职责过载并精准控制副作用触发时机。以下是针对你的场景的具体实践方案:
1. 核心用例的定位:CreateBookUseCase
- 职责:仅聚焦创建书籍的核心业务逻辑——比如校验书籍元数据、持久化到数据仓库,不包含任何外部副作用(如发送邮件、调用第三方服务)。
- 定位:属于Clean Architecture的「用例层」核心组件,是可复用的基础单元,其他内部用例可以安全调用它,无需担心触发意外动作。
2. 编排型/外层用例的三种命名与实践方案
方案一:Workflow命名法(CreateBookWorkflowUseCase)
- 核心特点:直接表明这是一个多步骤的流程编排组件,明确它不是单一职责的核心用例。
- 适用场景:当创建书籍的流程包含多个关联操作(如发邮件、记录操作日志、同步数据到索引)时,这个命名能清晰传达组件的编排属性。
- 扩展性:后续新增流程步骤时,只需在该用例中追加逻辑,核心用例无需改动,符合开闭原则。
方案二:Facade命名法(CreateBookFacade)
- 核心特点:将其定位为外部客户端(API、CLI)与内部用例的桥梁,封装内部复杂逻辑,给外部提供简洁的调用入口。
- 注意事项:Facade更偏向「接口层的封装」,如果放在用例层,建议通过目录结构(如
use_cases/facades)与核心用例明确区分,避免层级混淆。
方案三:Action命名法(HandleCreateBookActionUseCase)
- 核心特点:精准表达这是处理外部发起的用户动作,而非单纯的业务逻辑执行。完全匹配你的需求——只有当客户端主动发起创建请求时,才会触发包括发邮件在内的完整流程,内部用例调用核心
CreateBookUseCase不会触发副作用。 - 扩展性:后续如果需要给这个用户动作增加更多步骤(比如同步书籍信息到推荐系统、通知运营人员),只需在该用例中编排新增操作,核心用例保持独立稳定,扩展性极强。
最佳实践建议
- 优先选择Action命名法:它最清晰地界定了用例的触发场景和职责范围,完全避免了歧义,符合你需求的精准性。
- 强化目录区分:将核心用例放在
use_cases/core目录,编排型用例放在use_cases/actions或use_cases/workflows目录,从结构上明确层级差异。 - 遵循依赖规则:编排型用例依赖核心用例,核心用例不依赖任何外层组件,严格符合Clean Architecture的「内层不依赖外层」原则。
内容的提问来源于stack exchange,提问作者Odin Hufnagl
相关产品推荐
相关产品推荐

