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

ASP.NET Core中Clean Architecture扩展方法文件夹放置位置咨询

在ASP.NET Core Clean Architecture中放置扩展方法的最佳实践

扩展方法的存放位置完全取决于它所扩展的类型所属的层次,严格遵循Clean Architecture的依赖规则(内层不依赖外层,外层依赖内层):

1. 领域层(Domain)中的扩展方法

如果扩展的是领域层核心类型(实体、值对象、枚举、领域服务接口等),直接在Domain项目下创建Extensions文件夹存放:

  • 示例:扩展Order实体的CalculateTotal()方法,放在Domain/Extensions/OrderExtensions.cs
  • 注意:这里的扩展方法只能依赖Domain层内部类型,不能引用Application、Infrastructure或Presentation层的代码。

2. 应用层(Application)中的扩展方法

针对应用层类型(DTO、MediatR请求/响应对象、应用服务接口等)的扩展,放在Application项目的Extensions文件夹:

  • 示例:扩展OrderDto的MapToOrder()转换方法(映射到Domain的Order实体),放在Application/Extensions/OrderDtoExtensions.cs
  • 注意:可以依赖Domain层,但不能依赖Infrastructure或Presentation层的实现类。

3. 基础设施层(Infrastructure)中的扩展方法

针对基础设施层具体实现类(EF Core的DbContext、第三方服务客户端、仓储实现等)的扩展,放在Infrastructure项目的Extensions文件夹:

  • 示例:扩展AppDbContext的SeedData()初始化方法,放在Infrastructure/Extensions/AppDbContextExtensions.cs
  • 注意:可以依赖Domain和Application层,允许引用外部库(比如EF Core、HttpClient等)。

4. 表现层(Presentation)中的扩展方法

针对ASP.NET Core相关类型(Controller、HttpContext、ViewModel、中间件等)的扩展,放在Presentation项目的Extensions文件夹:

  • 示例:扩展ControllerBase的AddAppNotification()方法,放在Presentation/Extensions/ControllerExtensions.cs
  • 注意:可以依赖前面所有层,以及ASP.NET Core的框架组件。

5. 通用工具类扩展

如果是不绑定任何业务逻辑的通用扩展(比如字符串、集合、日期的通用处理方法),可以创建独立的Shared(或Common)项目,在其中创建Extensions文件夹存放,所有其他层都可引用该项目。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:25:36