You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clean Architecture/DDD:用例如何初始化实体?最佳方案探讨

《Clean Architecture》中用例初始化实体的最佳实践

根据Uncle Bob《Clean Architecture》的核心定义,系统核心由**Entities(核心业务规则)和Use Cases(用例对象)**构成:用例负责建模与实体交互的业务流程,但实践中会遇到两个核心矛盾:

书中明确禁止将实体作为参数传入用例类;但如果每个用例的输入都包含实体初始化的全部数据,当实体新增参数时,所有复用该实体的用例输入都要修改,维护成本极高。

针对这个问题,以下是符合Clean Architecture原则的最佳解决方法:

1. 引入实体工厂(Entity Factory)

  • 定义独立的实体工厂类,将实体的初始化逻辑从用例中剥离,专门负责实体的实例化
  • 用例只需向工厂传递自身业务流程所需的必要数据(而非实体全量参数),由工厂根据实体的构造规则完成创建
  • 当实体参数变更时,仅需调整工厂的创建逻辑,所有依赖该实体的用例无需修改输入结构

2. 采用分层输入DTO设计

  • 摒弃为每个用例单独定义全量实体输入DTO的方式,设计分层的DTO结构:
    • 基础DTO:包含实体初始化的通用必填字段,作为所有相关用例输入的基础
    • 扩展DTO:针对特定用例的额外业务字段,继承基础DTO
  • 实体参数变更时,仅需更新基础DTO的结构,所有继承它的扩展DTO自动同步变更,避免逐个修改用例的输入定义

3. 基于依赖反转原则抽象实体创建接口

  • 定义IEntityFactory抽象接口,声明实体创建的标准方法,用例仅依赖该接口而非具体的工厂实现
  • 具体的工厂类实现该接口,负责实体的实际初始化逻辑
  • 这种设计完全符合Clean Architecture的依赖规则(核心层不依赖外层实现),同时彻底隔离实体变更对用例层的影响

Clean Architecture架构图

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:52:10