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

.NET Core API分层架构目录与类命名规范咨询

.NET Core API 架构规范优化建议

针对你提出的N层架构.NET Core API目录结构、命名规范及组件组织问题,结合.NET生态主流实践,给出如下优化建议:

一、目录结构优化

你的初步方案已具备基础框架,调整部分细节以提升可读性和扩展性:

Apiproject/
├── Controllers/          # API控制器,处理HTTP请求
│   ├── *Controller.cs    # 示例:OrderController.cs
├── Enums/                # 枚举类型,替换原enumerables,命名更规范
│   ├── *.cs              # 示例:OrderStatusEnum.cs
├── Handlers/             # 业务逻辑处理类(命令/查询处理)
│   ├── Abstractions/     # 处理接口,分层更清晰
│   │   ├── I*Handler.cs  # 示例:ICreateOrderHandler.cs
│   ├── Implementations/  # 接口实现,替换原implementors,命名更标准
│   │   ├── *Handler.cs   # 示例:CreateOrderHandler.cs
├── Models/               # 领域模型(核心业务对象)
│   ├── *.cs              # 示例:Order.cs
├── DTOs/                 # 数据传输对象,复数形式符合惯例
│   ├── Requests/         # 请求DTO
│   │   ├── *.cs          # 示例:CreateOrderRequest.cs
│   ├── Responses/        # 响应DTO
│   │   ├── *.cs          # 示例:OrderDetailResponse.cs
├── Validators/           # 验证器
│   ├── *Validator.cs     # 示例:CreateOrderRequestValidator.cs
├── Repositories/         # 数据访问仓储
│   ├── Abstractions/     # 仓储接口
│   │   ├── I*Repository.cs # 示例:IOrderRepository.cs
│   ├── Implementations/  # 仓储实现
│   │   ├── *Repository.cs  # 示例:OrderRepository.cs
├── Entities/             # EF Core实体类,从Repositories下独立,便于跨层复用
│   ├── *.cs              # 示例:OrderEntity.cs
├── Auth/                 # 认证授权相关组件
│   ├── Middlewares/      # 认证中间件
│   │   ├── *.cs          # 示例:JwtAuthMiddleware.cs
│   ├── Filters/          # 授权过滤器
│   │   ├── *.cs          # 示例:PermissionFilter.cs
├── Middlewares/          # 全局通用中间件(日志、异常处理等)
│   ├── *.cs              # 示例:GlobalExceptionMiddleware.cs
├── Filters/              # 全局通用过滤器(模型验证、性能监控等)
│   ├── *.cs              # 示例:ModelValidationFilter.cs
├── Utils/                # 通用工具类
│   ├── *.cs              # 示例:DateTimeUtility.cs

二、命名空间规范

严格遵循.NET PascalCase命名规则,与目录结构一一对应:

  • 控制器:Apiproject.Controllers
  • 枚举:Apiproject.Enums
  • 处理接口:Apiproject.Handlers.Abstractions
  • 处理实现:Apiproject.Handlers.Implementations
  • 领域模型:Apiproject.Models
  • 请求DTO:Apiproject.DTOs.Requests
  • 响应DTO:Apiproject.DTOs.Responses
  • 验证器:Apiproject.Validators
  • 仓储接口:Apiproject.Repositories.Abstractions
  • 仓储实现:Apiproject.Repositories.Implementations
  • 实体类:Apiproject.Entities
  • 认证中间件:Apiproject.Auth.Middlewares
  • 全局中间件:Apiproject.Middlewares

三、类命名规范

1. Handler命名优化

如果你的Handler用于处理命令/查询(CQRS模式),建议采用更明确的命名,避免模糊的*Handler:

  • 接口:I[Command/QueryName]Handler,如ICreateOrderHandler、IGetOrderDetailHandler
  • 实现:[Command/QueryName]Handler,如CreateOrderHandler、GetOrderDetailHandler
    如果是通用业务处理,保持I*Handler和*Handler也可,但需确保名称体现具体职责,比如OrderStatusUpdateHandler而非OrderHandler。

2. 其他类命名

  • 控制器:必须以Controller结尾,如OrderController
  • 枚举:建议以Enum结尾(可选,提升可读性),如OrderStatusEnum
  • DTO:请求类以Request结尾,响应类以Response结尾,如CreateOrderRequest、OrderListResponse
  • 验证器:与目标DTO/模型对应,以Validator结尾,如CreateOrderRequestValidator
  • 仓储:接口以I开头,实现以Repository结尾,如IOrderRepository、OrderRepository
  • 实体类:可直接用业务名称,或加Entity后缀区分领域模型,如OrderEntity
  • 工具类:以Utility或功能名称结尾,如DateTimeUtility、EncryptionHelper

四、中间件与Action Filters组织

1. 中间件

  • 按功能拆分目录:认证相关中间件放在Auth/Middlewares,全局通用中间件(异常处理、日志、请求追踪)放在根目录Middlewares
  • 每个中间件单独一个文件,类名与文件名一致,如GlobalExceptionMiddleware.cs
  • 在Program.cs中通过app.UseMiddleware<GlobalExceptionMiddleware>()注册

2. Action Filters

  • 按职责划分:授权过滤器放在Auth/Filters,通用过滤器(模型验证、性能监控)放在根目录Filters
  • 类名明确体现功能,如PermissionFilter、ModelValidationFilter
  • 全局过滤器在Program.cs中通过builder.Services.AddControllers(options => options.Filters.Add<ModelValidationFilter>())注册
  • 局部过滤器直接在Controller或Action上标注特性,如[Permission("Order:Edit")]

总结

上述调整保留了你原有方案的核心架构,同时贴合.NET社区主流实践,提升了代码的可读性、可维护性和扩展性。Handler命名建议结合具体业务场景明确化,中间件与过滤器按功能拆分组织,便于后续迭代和团队协作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:50:22