清洁架构(Clean Architecture)中工厂应归属哪一层?接口与实现是否需分层?
清洁架构中工厂类的分层归属与接口实现惯例
工厂类的通常分层归属
工厂类的归属核心看两个维度:它创建的对象所属层级,以及它依赖的资源:
- 若工厂创建实体(Entities)或用例(Use Cases)层的核心业务对象,且不依赖任何外部资源(比如数据库、第三方服务),这类工厂属于业务核心逻辑的一部分,通常放在用例层(少数场景下也可放在实体层)。
- 若工厂负责创建接口适配器层或框架与驱动层的对象(比如数据库Repository实例、API客户端),或者依赖了外部资源(配置文件、数据库连接等),则工厂应放在接口适配器层或对应的驱动层。
工厂接口与实现分离的规则
遵循清洁架构的依赖倒置原则(DIP),核心规则是:
- 抽象(工厂接口)放在内层,具体实现放在外层
- 例如:服务于业务逻辑的工厂接口(比如
IUserEntityFactory)应放在用例层,因为它是业务逻辑的抽象需求;如果该工厂的实现需要从数据库加载数据来创建实体,那么实现类就放在接口适配器层,依赖数据库相关的资源。 - 内层(实体、用例层)仅依赖抽象接口,不关心具体实现细节;外层(接口适配器、驱动层)负责实现这些接口,同时依赖内层的抽象定义。
- 例如:服务于业务逻辑的工厂接口(比如
- 针对外层对象的工厂:如果是创建框架层对象的抽象接口(比如
IHttpClientFactory),接口可放在接口适配器层,具体实现则放在框架与驱动层(比如基于某HTTP库的实现)。
内容的提问来源于stack exchange,提问作者Filip Östermark
相关产品推荐
相关产品推荐

