当前位置: 首页 > news >正文

ASP.NET Core 中的构建者模式

在ASP.NET Core 中,构建者模式(Builder Pattern)是一种广泛应用的创建型设计模式,其核心思想是将复杂对象的构建过程与表示分离,通过分步配置的方式创建对象,使得相同的构建过程可以生成不同的结果。这种模式在ASP.NET Core 的框架设计中占据重要地位,尤其在处理复杂配置(如主机配置、服务注册、HTTP 客户端配置等)时表现突出。

一、ASP.NET Core 中构建者模式的核心应用场景

ASP.NET Core 框架大量使用构建者模式处理 "复杂对象的分步配置",典型场景包括:

1. 主机构建(IHostBuilder / IWebHostBuilder

主机(Host)是ASP.NET Core 应用的运行容器,负责管理应用生命周期、配置、服务等核心组件。构建主机是一个复杂过程(需配置环境、配置文件、服务、中间件等),因此框架通过IHostBuilder(通用主机)和IWebHostBuilder(Web 主机)实现构建者模式。

示例:Web 主机构建

csharp

public class Program
{public static void Main(string[] args){// 构建Web主机(链式配置,每步返回构建者自身)var host = WebApplication.CreateBuilder(args)// 配置主机(如环境、配置源).ConfigureHostConfiguration(config =>{config.AddJsonFile("hostsettings.json", optional: true);})// 配置应用配置(如appsettings.json).ConfigureAppConfiguration((hostingContext, config) =>{config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);config.AddEnvironmentVariables();})// 配置服务(依赖注入).ConfigureServices((hostContext, services) =>{services.AddControllers();services.AddScoped<IMyService, MyService>();})// 构建主机.Build();// 运行应用host.Run();}
}

核心特点

  • 每个配置方法(ConfigureHostConfigurationConfigureServices等)均返回构建者实例(IWebHostBuilder),支持链式调用。
  • 开发者可按需 "叠加" 配置(如默认配置基础上添加自定义配置),无需关心底层构建细节。

2. HTTP 客户端配置(IHttpClientBuilder

HttpClient的配置涉及基地址、超时时间、消息处理程序、拦截器等复杂选项,ASP.NET Core 通过IHttpClientBuilder实现构建者模式,简化配置过程。

示例:配置 HttpClient

csharp

public void ConfigureServices(IServiceCollection services)
{// 创建HttpClient构建者,链式配置services.AddHttpClient("MyApiClient")// 配置基地址.ConfigureHttpClient(client =>{client.BaseAddress = new Uri("https://api.example.com/");client.Timeout = TimeSpan.FromSeconds(30);})// 添加消息处理程序(如日志、重试).AddHttpMessageHandler<LoggingHandler>().AddPolicyHandler(GetRetryPolicy()); // 集成Polly重试策略
}// 定义重试策略
private IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{return HttpPolicyExtensions.HandleTransientHttpError().WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));
}

核心特点

  • 通过AddHttpClient获取IHttpClientBuilder,后续配置(如ConfigureHttpClientAddHttpMessageHandler)均基于构建者扩展,最终自动注册配置好的HttpClient到 DI 容器。

3. 选项配置(IOptionsBuilder

ASP.NET Core 的选项模式(Options Pattern)中,IOptionsBuilder用于分步配置选项验证、命名选项等,也是构建者模式的典型应用。

示例:配置带验证的选项

csharp

public void ConfigureServices(IServiceCollection services)
{// 配置选项并启用验证services.AddOptions<MyOptions>().BindConfiguration("MyOptions") // 绑定配置节点.ValidateDataAnnotations() // 启用数据注解验证.Validate(option => option.MaxCount > 0, "MaxCount必须大于0") // 自定义验证.ValidateOnStart(); // 启动时验证(而非首次使用时)
}public class MyOptions
{[Required]public string ApiKey { get; set; }public int MaxCount { get; set; }
}

二、构建者模式的优势(结合ASP.NET Core 场景)

  1. 简化复杂对象配置
    主机、HttpClient 等对象的配置涉及多维度(环境、服务、中间件等),构建者模式通过链式方法将配置拆分为独立步骤,降低认知复杂度。

  2. 灵活性与可扩展性
    开发者可在默认配置基础上 "叠加" 自定义逻辑(如添加额外配置源、消息处理程序),无需修改框架底层代码(符合开放封闭原则)。

  3. 可读性与可维护性
    链式调用使配置过程直观易懂(如builder.ConfigureA().ConfigureB().Build()),相比 "一次性传入大量参数" 的方式更易维护。

  4. 隔离构建与使用
    构建者负责对象的创建细节,使用者只需关注 "配置什么",无需关心 "如何创建"(如IHostBuilder.Build()内部处理主机初始化细节)。

三、自定义构建者模式实现(原理示例)

理解ASP.NET Core 框架中的构建者模式后,可尝试自定义构建者类,模拟框架设计思路。

示例:自定义一个 "订单构建者"

csharp

// 复杂对象:订单
public class Order
{public string ProductName { get; set; }public int Quantity { get; set; }public decimal Price { get; set; }public bool IsVip { get; set; }public decimal TotalPrice { get; private set; }public void CalculateTotal(){TotalPrice = Price * Quantity;if (IsVip) TotalPrice *= 0.9m; // VIP打9折}
}// 构建者接口
public interface IOrderBuilder
{IOrderBuilder SetProduct(string name, decimal price);IOrderBuilder SetQuantity(int quantity);IOrderBuilder SetVip(bool isVip);Order Build();
}// 构建者实现
public class OrderBuilder : IOrderBuilder
{private readonly Order _order = new Order();public IOrderBuilder SetProduct(string name, decimal price){_order.ProductName = name;_order.Price = price;return this; // 返回自身,支持链式调用}public IOrderBuilder SetQuantity(int quantity){_order.Quantity = quantity;return this;}public IOrderBuilder SetVip(bool isVip){_order.IsVip = isVip;return this;}public Order Build(){_order.CalculateTotal(); // 构建最终对象前的计算return _order;}
}// 使用构建者
public class OrderService
{public Order CreateVipOrder(){return new OrderBuilder().SetProduct("笔记本电脑", 5000m).SetQuantity(1).SetVip(true).Build();}
}

总结

构建者模式是ASP.NET Core 框架设计的核心模式之一,其思想贯穿于主机配置、服务注册、HTTP 客户端等关键组件中。掌握这一模式不仅能更好地理解框架底层逻辑,还能在自定义复杂对象配置时(如业务中的订单、报表生成等)设计出更灵活、可维护的代码。

核心要点:分步配置、链式调用、构建与表示分离,这也是ASP.NET Core"约定优于配置" 理念在设计模式层面的体现。

http://www.dtcms.com/a/350010.html

相关文章:

  • uniapp中加载.urdf后缀的3D模型(three.js+urdf-loader)
  • 灰狼算法+四模型对比!GWO-CNN-BiLSTM-Attention系列四模型多变量时序预测
  • day62 Floyd 算法 A * 算法
  • 【GPT入门】第58课 感性认识Imdeploy介绍与实践
  • GPT-5评测
  • .prettierrc有什么作用,怎么书写
  • 考研复习-操作系统-第三章-内存管理
  • LRU实现
  • 【YOLOv5部署至RK3588】模型训练→转换RKNN→开发板部署
  • 冯·诺依曼架构:现代计算机的基石与瓶颈
  • 创新BIM技术在大型冶金综合管网项目中的应用
  • redis知识点
  • MyBatis-Plus 快速入门 -常用注解
  • response.json()与 json.loads(json_string)有何区别
  • 2025年5月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(一)
  • 【Java】 Spring Security 赋能 OAuth 2.0:构建安全高效的现代认证体系
  • spring boot开发:一些基础知识
  • 5分钟了解单元测试
  • 大数据量的ArrayList怎么获取n个元素
  • Ansible 环境配置(基于 RHEL 9)
  • 文件权限详解
  • Allegro-过孔篇(普通VIA,盲埋孔)
  • SOME/IP-SD报文中 Entry Format(条目格式)-理解笔记1
  • 新的 macOS 安装程序声称能够快速窃取数据,并在暗网上销售
  • 第四章:大模型(LLM)】07.Prompt工程-(12)评估prompt的有效性
  • 【LIN】2.LIN总线通信机制深度解析:主从架构、五种帧类型与动态调度策略
  • maven-default-http-blocker (http://0.0.0.0/)
  • Gemini CLI 与 MCP 服务器:释放本地工具的强大潜力
  • Swiper属性全解析:快速掌握滑块视图核心配置!(2.3补充细节,详细文档在uniapp官网)
  • 飞牛影视桌面客户端(fntv-electron)使用教程