八年前,每个.NET开发者都能背出23种设计模式的名字。今天,同样的面试题可能会换来一个尴尬的笑——不是不知道,而是太知道了,知道什么时候该忘掉它们。
从.NET Framework到.NET 10,从本地EXE到云原生容器,设计模式的江湖地位经历了残酷洗牌。有些成了标配,有些沦为反模式,还有些,你照着教科书写会被Code Review打回来。
![]()
这篇梳理基于.NET生态的最新现状:C# 14的新特性、依赖注入(DI)的全面普及、以及云原生对性能和可维护性的硬性要求。不追旧账,只看2026年什么真的好用。
![]()
设计模式的老本行没变:分离关注点、保证可测试性、让系统能随需求演化。但"盲目套用"本身成了新陷阱。现在的共识是——上下文决定一切,团队的规模、问题的复杂度、未来的变更频率,都比"这是什么模式"更重要。
创建型模式管的是对象怎么生出来。Singleton(单例)还活着,但活法变了。日志、配置这些真·全局唯一资源,单例依然合理。但现代.NET的默认解法是依赖注入容器(如Microsoft.Extensions.DependencyInjection),把服务注册为单例生命周期,而不是手写一个static Instance。后者测试难做、依赖难追踪,已经是公认的坑。
Factory Method(工厂方法)和Abstract Factory(抽象工厂)则越活越滋润。.NET的插件架构、运行时多态、接口+DI的组合拳,让工厂模式成为扩展性的基础设施。一个支付网关工厂,能在不改动核心代码的情况下切换Stripe、PayPal或自研渠道——这种场景在微服务和SaaS化系统里遍地都是。
结构型模式处理的是"怎么拼"。Adapter(适配器)在集成遗留系统或第三方API时仍是救命稻草。Decorator(装饰器)在ASP.NET Core中间件管道里无处不在,请求日志、认证、限流,层层包裹。Facade(外观)对付复杂子系统依然有效,但云原生时代更常见的做法是直接把大系统拆成独立服务,Facade的使用场景在收窄。
![]()
Proxy(代理)从手动实现变成了基础设施特性。HTTP客户端的Polly重试、EF Core的延迟加载、甚至gRPC的拦截器,都是代理思想的工程化,开发者很少需要从零写起。Composite(组合)在UI组件树或文档对象模型里还有位置,但业务逻辑层用得少了——扁平化数据结构更迎合数据库和序列化的胃口。
行为型模式管的是对象怎么协作。Strategy(策略)是2026年的大赢家。C# 9开始的switch表达式、C# 10的模式匹配增强、再到C# 12的集合表达式,让策略的替换和组合变得极其轻量。配合DI,策略模式从"写一堆类"变成了"注册一个委托"。
Observer(观察者)的原始实现基本退役。事件委托的内存泄漏风险、订阅管理的复杂度,让Reactive Extensions(Rx)和事件总线(如MediatR)成为主流。State(状态)模式在复杂状态机场景仍有价值,但简单的状态流转直接用switch表达式或状态机库(如Stateless)更务实。Chain of Responsibility(职责链)在ASP.NET Core的请求管道里是底层机制,业务代码里反而要谨慎——链条过长时,调试和性能都是噩梦。
几个明确的反模式信号:手动Singleton、事件委托的裸用、为模式而模式的过度设计。2026年的.NET代码库,更推崇显式依赖、不可变对象、纯函数和垂直切片架构。设计模式没有消失,只是融入了更现代的工程实践——你依然在用它,但可能不再叫它的名字。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.