SuperAPI AI 工具集

dotnet-patterns

编程与开发

查看项目

更新于 10-15 08:35

技能介绍

用途

dotnet-patterns 是一份 C# 与 .NET 的惯用模式(idiomatic patterns)与最佳实践参考,目标是帮助构建稳健、高性能且可维护的 .NET 应用。资料说明可在以下情况启用:编写新的 C# 代码、审查 C# 代码、重构既有 .NET 应用、使用 ASP.NET Core 设计服务架构。

主要能力

核心原则

  1. 优先不可变性:数据模型使用 records 与 init-only 属性,可变性应是显式且有理由的选择。示例中给出不可变值对象 public sealed record Money(decimal Amount, string Currency);,以及使用 init 设置器的不可变 DTO CreateOrderRequest(含 required string CustomerId、required IReadOnlyList<OrderItem> Items);反面示例是带公共 setter 的可变模型。
  2. 显式优于隐式:明确可空性、访问修饰符与意图。示例 UserService 使用私有只读字段、构造函数注入并在构造时对依赖做空值检查,方法签名显式标注可空返回 Task<User?>。
  3. 依赖抽象:用接口定义服务边界,并通过 DI 容器注册,例如定义 IOrderRepository,注册 builder.Services.AddScoped<IOrderRepository, SqlOrderRepository>();。

异步与配置模式

  • Async/Await:要求“全程异步”并传递 CancellationToken;反面示例指出对异步结果使用 .Result 存在死锁风险。
  • 并行异步:对相互独立的操作使用 Task.WhenAll,示例通过 ordersTask、metricsTask、alertsTask 并发加载仪表盘数据。
  • Options 模式:将配置节绑定到强类型对象,示例 SmtpOptions 定义 SectionName 常量与 required 属性,注册使用 builder.Services.Configure<SmtpOptions>(builder.Configuration.GetSection(SmtpOptions.SectionName));,并通过 IOptions<SmtpOptions> 注入使用。
  • Result 模式:对预期内的失败返回显式的成功/失败结果而非抛出异常,示例给出泛型 Result<T> 的构造与 Success/Failure 静态方法,以及 PlaceOrderAsync 中的使用方式。

数据访问、管线与 API

  • 仓储模式配合 EF Core:示例 SqlOrderRepository 使用 Include、AsNoTracking、FirstOrDefaultAsync、ToListAsync 等方法,并传入 CancellationToken。
  • 中间件与管线:示例 RequestTimingMiddleware 通过 RequestDelegate 与 ILogger 记录请求耗时与状态码。
  • Minimal API:用路由分组组织端点,示例 app.MapGroup("/api/orders").RequireAuthorization().WithTags("Orders");,并展示 MapGet、MapPost 配合 TypedResults.Ok/NotFound/Created/BadRequest 的写法。
  • 守卫子句:提前校验与提前返回,使用 ArgumentNullException.ThrowIfNull、针对金额与货币的参数校验,避免深层嵌套。

反模式对照

资料以表格形式列出常见反模式与修复方式:async void 方法应返回 Task(事件处理器除外);.Result 或 .Wait() 应改用 await;catch (Exception) { } 应处理或带上下文重抛;在构造函数中 new Service() 应改用构造函数注入;公共字段应改为带合适访问器的属性;业务逻辑中的 dynamic 应用泛型或显式类型;可变静态状态应改用 DI 作用域或 ConcurrentDictionary;循环中的 string.Format 应改用 StringBuilder 或内插字符串处理器。

使用方式

资料提供的是模式说明与代码示例,按“何时激活”的场景将其作为编码与评审参考即可。具体安装命令、集成步骤暂未提供。

适用场景

适用于编写、审查和重构 C#/.NET 代码,以及在 ASP.NET Core 中设计服务架构与 API 端点,也可作为团队代码规范的对照清单。

限制

资料未说明其运行环境、版本兼容范围、授权方式、收费情况或与其他工具的集成方式,这些内容暂未提供。