- 博客(136)
- 收藏
- 关注
原创 访问者模式(Visitor)
/ 元素接口// 具体元素:段落set;// 具体元素:图片set;// 具体元素:表格set;// 访问者接口// HTML 导出访问者// Markdown 导出访问者!");
2025-04-22 15:19:02
406
原创 模板方法模式(Template Method)
模板方法模式是一种行为型设计模式,它在抽象类中定义一个算法的骨架,并将某些步骤的具体实现延迟到子类中。通过这种方式,模板方法模式允许子类在不改变算法整体结构的情况下,重新定义算法的某些特定步骤。// 模板方法:定义文档生成流程Save();// 抽象方法:子类必须实现模板方法模式通过抽象类固定算法流程,子类负责实现具体步骤。在.NET Core中,通过继承和虚方法/抽象方法实现该模式,典型应用如ASP.NET Core中间件管道。结合钩子方法可灵活控制算法中的可选步骤,增强扩展性。
2025-04-22 15:18:32
383
原创 接口(Interface)与抽象类(Abstract)的区别及使用场景
接口:在 .NET Core 中用于定义服务契约、依赖注入和跨组件交互(如ILogger抽象类:适合封装共享代码、状态管理和模板方法模式(如DbContext设计建议优先使用接口定义行为契约(尤其是在依赖注入场景)。当需要共享代码或管理状态时,使用抽象类。使用 C# 8.0+ 的默认接口方法增强接口的灵活性。
2025-04-22 14:27:41
248
原创 策略模式(Strategy)
策略模式是一种行为型设计模式,用于定义一系列算法(或行为),将它们封装为独立的类,并使这些算法可以相互替换。模式的核心思想是通过抽象策略接口解耦具体算法与调用者,使得算法的变化独立于使用它的客户端。策略模式通过抽象算法实现、动态切换逻辑,显著提升了代码的灵活性和可维护性。在 .NET Core 中,结合依赖注入可以更优雅地管理策略对象,适合电商支付、规则引擎等需要多算法灵活切换的场景。
2025-04-22 09:54:13
421
原创 状态模式(State)
状态模式是一种行为设计模式,允许对象在其内部状态改变时改变其行为,使对象看起来像是修改了其类。该模式将状态相关的逻辑分散到不同的状态类中,减少条件判断,提高代码的可维护性和扩展性。
2025-04-22 09:53:04
154
原创 观察者模式(Observer)
观察者模式(Observer Pattern)是一种行为设计模式,允许对象(观察者)订阅另一个对象(被观察者),并在被观察者状态变化时自动接收通知。以下是详细解释及在 .NET Core 中的实现示例。通过观察者模式,你可以轻松实现松耦合的对象间通信,而 .NET Core 的内置接口进一步简化了实现过程。)作为被观察者,当温度更新时,自动通知所有注册的显示设备(如手机应用、网页仪表盘)。维护观察者列表,提供注册、移除观察者的方法,并在状态变化时通知观察者。接口,简化观察者模式的实现。
2025-04-22 09:52:25
356
原创 备忘录模式(Memento)
备忘录模式(Memento Pattern)是一种行为设计模式,允许在不破坏对象封装性的前提下捕获并保存对象的内部状态,以便后续可以恢复到该状态。存储 Originator 的内部状态的对象。实现一个简单的文章编辑器,支持保存当前内容状态,并能通过撤销操作恢复到之前的某个状态。通过备忘录模式,可以优雅地实现对象状态的保存与恢复机制,同时保持代码的清晰和可维护性。需要保存和恢复状态的对象。负责创建备忘录(保存当前状态)和从备忘录恢复状态。负责保存和管理备忘录的历史记录。
2025-04-18 18:27:31
475
原创 中介者模式(Mediator)
中介者模式(Mediator Pattern)是一种行为型设计模式,旨在减少对象之间的直接耦合,通过引入一个中介对象来协调多个对象之间的交互。中介者充当对象之间的通信中心,对象之间不再直接相互引用,而是通过中介者进行通信。中介者模式通过集中管理对象间的交互,显著降低了系统的耦合度。在.NETCore中,结合依赖注入(如)可以更灵活地管理中介者和同事对象的生命周期。适用于需要统一协调多个对象交互的场景,如UI控件交互、微服务通信、事件总线等。
2025-04-16 09:51:11
262
原创 迭代器模式(Iterator)
它提供一种方法顺序访问聚合对象中的各个元素,而又不暴露该对象的内部表示。该模式的核心思想是将。通过迭代器模式,你可以灵活控制集合的遍历逻辑,同时保持代码的解耦和可扩展性。以下示例演示如何实现一个自定义集合的迭代器,支持。实现聚合接口,返回与自身结构对应的迭代器实例。从聚合对象中分离,使遍历逻辑能够独立变化。可自动生成迭代器状态机,无需手动实现。实现迭代器接口,跟踪当前遍历位置。定义遍历元素所需的方法(如。定义创建迭代器的方法(如。.NET 中通常直接使用。** 迭代器接口**** 具体迭代器**
2025-04-16 09:50:32
334
原创 解释器模式(Interpreter)
用于定义语言的语法规则并提供解释器来解释执行这些规则。它适用于需要解析和执行特定领域语言(DSL)的场景,例如数学表达式、SQL查询、正则表达式等。)或工具(如解析器生成器 ANTLR)来实现。解释器模式适合解决核心的“解释执行”问题,但构建抽象语法树(AST)可能需要借助其他技术。实现与语法中的非终结符(由多个终结符或非终结符组成的规则)相关的解释操作。实现与语法中的终结符(不可再分的元素,如数字、变量)相关的解释操作。对于复杂文法(如四则运算的优先级和括号),需要结合其他模式(如。
2025-04-16 09:49:57
398
原创 命令模式(Command)
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为独立对象,从而允许参数化客户端、请求排队、记录日志或支持撤销操作。以下是对命令模式的详细说明及在.NET Core中的实现示例。模拟智能家居遥控器,通过按钮控制灯的开关,并支持撤销操作。2. 实现接收者(Receiver)3. 实现具体命令(ConcreteCommand)4. 实现调用者(Invoker)5. 客户端使用支持宏命令通过组合多个命令实现批量操作:优点解耦:调用者与接收者无直接依赖。扩展
2025-04-16 09:48:29
239
原创 责任链模式(Chain of Responsibility)
责任链模式(Chain of Responsibility)是一种行为设计模式,允许将请求沿着处理链传递,直到有一个处理者处理该请求。每个处理者决定自己是否处理请求或传递给链中的下一个处理者。以下是一个在.NET Core中实现责任链模式的详细示例。
2025-04-13 15:33:57
445
原创 代理模式(Proxy)
代理模式是一种结构型设计模式,通过创建一个代理对象来控制对原始对象的访问。代理类与原始类实现相同的接口,客户端通过代理间接操作原始对象,常用于访问控制、延迟加载、日志记录等场景。代理模式通过中间层控制对象访问,是实现系统扩展性和安全性的重要工具。在.NETCore中,结合依赖注入可优雅地集成代理,实现权限控制、缓存等横切关注点。
2025-04-13 15:31:53
361
原创 享元模式(Flyweight)
享元模式是一种结构型设计模式,核心目标是减少内存占用和提高性能,通过共享相似对象的状态来实现。它适用于需要创建大量相似对象的场景,通过分离对象的内部状态(可共享的、不变的部分)和外部状态(不可共享的、变化的部分),避免重复存储冗余数据。
2025-04-13 15:30:35
301
原创 外观模式(Facade)
外观(Facade)模式是一种结构型设计模式,旨在为复杂子系统提供一个统一的简化接口,降低客户端与子系统的耦合度。假设有一个订单处理流程,包含库存检查、支付处理和邮件通知三个子系统。通过外观模式封装这些步骤,客户端只需调用外观类的一个方法即可完成下单。通过外观模式,复杂的子系统交互被封装,客户端代码更简洁,系统结构更清晰。
2025-04-11 18:26:52
940
原创 装饰器模式(Decorator)
装饰器模式通过组合替代继承,实现了功能的灵活扩展。在 .NET Core 中,结合依赖注入和第三方库(如 Scrutor),可以更优雅地管理装饰器的注册与使用。,允许动态地为对象添加额外功能,而无需修改其原始结构。它通过将对象包装在装饰器类的实例中来实现功能的扩展,符合。继承组件接口,并持有一个组件对象的引用(通过组合实现功能叠加)。假设有一个订单处理服务,需要动态添加日志记录和输入验证功能。继承装饰器基类,添加具体的新功能。(对扩展开放,对修改关闭)。定义对象和装饰器的共同接口。实现组件接口的基础对象。
2025-04-11 18:26:19
397
原创 组合模式(Composite)
组合(Composite)设计模式是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。它允许客户端以统一的方式处理单个对象和组合对象。以下是详细解析及一个 .NET Core 实现示例。通过组合模式,可以优雅地处理树形数据结构的操作,使代码更简洁、可维护性更高。
2025-04-11 18:25:25
348
原创 桥接模式(Bridge)
桥接模式是一种结构型设计模式,旨在将抽象部分(Abstraction)与实现部分(Implementor)分离,使它们可以独立变化。它通过组合代替继承,解决多层继承带来的类膨胀问题,同时支持多维度扩展。IRenderer// 实现化接口:渲染引擎桥接模式通过组合代替继承,将抽象和实现解耦,使系统更灵活、可扩展。在需要处理多维变化或避免类层次爆炸的场景下尤为适用。通过示例可见,形状与渲染引擎能够独立变化并自由组合,充分体现了桥接模式的核心价值。
2025-04-11 18:24:54
362
原创 适配器模式(Adapter)
适配器模式是一种结构型设计模式,用于解决两个不兼容接口之间的兼容性问题。它通过将一个类的接口转换成客户端期望的另一个接口,使原本因接口不匹配而无法协同工作的类能够一起工作。
2025-04-11 18:24:16
395
原创 原型模式(Prototype)
原型模式是一种创建型设计模式,其核心思想是通过复制现有对象(原型)来创建新对象,而非通过构造函数实例化。当对象创建成本较高(如需要复杂计算或资源加载)时。当系统需要动态运行时指定对象类型,但避免与具体类耦合时。当需要快速生成相似对象时。在 .NET Core 中,原型模式通过ICloneable或自定义拷贝逻辑实现,深拷贝可借助序列化工具简化。选择深拷贝或浅拷贝需根据业务场景决定。对于复杂对象,推荐使用序列化方式或第三方库(如AutoMapper)来简化深拷贝实现。
2025-04-10 15:42:51
428
原创 建造者模式
set;set;set;set;Format");Title");Content");Footerget;set;get;set;get;set;get;set;Title } ");} }
2025-04-07 16:31:51
342
原创 .NET Core 基于声明的身份验证与存储方法
是一种将用户身份信息抽象为一系列可验证的声明(Claims)的认证模型。与传统基于角色的身份验证相比,它提供了更细粒度的权限控制和灵活性。Core Identity 是官方提供的用户管理系统,内置用户信息存储、密码哈希、角色管理等功能。在 Web API 中,用户信息可通过 JWT(JSON Web Token)存储并在请求头中传递。如果不想使用 Identity,可以直接操作声明或使用其他存储方式(如数据库、外部 API)。通过合理选择存储方式,可以灵活管理用户信息并实现安全的身份验证。
2025-04-06 18:51:14
456
原创 Cookie与Token认证对比及适用场景
Core中,两者可通过中间件灵活配置,甚至混合使用(如Cookie认证处理Web页面,Token认证处理API请求)。
2025-04-06 12:17:51
358
原创 .NET Core实现JWT认证步骤
通过以上步骤,即可在.NET Core中实现基于JWT的身份认证与授权。在需要认证的Controller或Action上添加。
2025-04-06 12:09:23
222
原创 验证失败响应格式处理
或数据注解触发的验证),默认会返回一个包含错误信息的。在 Controller 的 Action 中手动检查。在 .NET Core 中,当模型验证失败时(如通过。选择适合你项目需求的方法,通常推荐使用。特性,可以通过覆盖默认的。,并返回自定义响应格式。
2025-04-06 11:57:40
316
原创 FluentValidation与DataAnnotations对比分析
FluentValidation 在代码组织、复杂逻辑支持、可测试性等方面优于 DataAnnotations,适合中大型项目;而 DataAnnotations 适合简单场景,快速实现基本验证。根据项目需求灵活选择即可。,它通过流畅的接口(Fluent API)和 lambda 表达式来定义验证规则,使验证逻辑更清晰、灵活且易于维护。与传统的 DataAnnotations(通过属性标记验证)相比,它在复杂场景中更具优势。简单规则(如必填、格式)足够,但复杂逻辑受限。等属性直接在模型类中定义规则。
2025-04-06 11:48:02
911
原创 .NET Core模型绑定原理与复杂类型绑定
在.NET Core中,模型绑定是将HTTP请求中的数据(如表单字段、查询字符串、路由数据或请求体)自动映射到控制器动作方法参数或复杂对象的过程。通过遵循命名约定和合理设计模型结构,.NET Core 的模型绑定机制能够高效处理复杂类型的映射,显著简化数据接收与验证流程。显式指定从请求体绑定(通常用于 JSON/XML),需与。接口可自定义绑定逻辑(如特殊格式解析)。指定绑定的前缀,例如将。
2025-04-03 15:26:37
426
原创 .NET Core API HATEOAS约束及实现
在 .NET Core 中,HATEOAS(Hypermedia as the Engine of Application State)是 REST 架构的一个核心约束,它要求 API 的响应中应包含动态的超媒体链接,指导客户端如何与 API 交互。这种设计使得客户端无需依赖外部文档,而是通过服务器返回的链接来发现和操作资源。以下是实际项目中的实现步骤和示例:创建一个通用模型,包含资源数据和关联的链接列表:2. 生成链接在控制器或服务层中动态生成链接,例如:3. 统一处理链接生成使用 中间件 或 过
2025-04-03 15:18:40
398
原创 .NET Core API版本控制实现方法
在 ASP.NET Core 中,可以通过 Microsoft.AspNetCore.Mvc.Versioning。库实现灵活的 API 版本控制,支持 URL 路径、HTTP 头和查询参数等多种方式。,可以灵活实现 URL 路径、查询参数、HTTP 头等多种版本控制方式。在 Controller 或 Action 的路由中使用。并结合路由模板,即可满足不同场景的版本管理需求。
2025-04-03 15:10:31
274
原创 .NET Core控制器返回类型解析
Core中,控制器的Action方法支持多种返回类型,以下是主要的分类及其区别,以及。需要动态返回多种结果类型(如视图和文件下载),或需要兼容旧版代码时。适合API开发,提供更好的类型安全和Swagger集成,简化代码。
2025-04-03 15:05:06
314
原创 属性路由与传统路由区别解析
使用传统路由:适合简单项目,遵循默认约定,希望集中管理路由。使用属性路由:适合复杂需求,需高度定制化 URL,或构建 RESTful API。
2025-04-03 14:30:58
416
原创 MySQL索引优化指南
索引优化需结合业务查询模式、数据分布及MySQL特性。通过合理设计索引、分析执行计划、避免失效场景,并定期维护,可显著提升数据库性能。MySQL索引优化是提升数据库查询性能的关键步骤。
2025-04-02 11:41:23
888
原创 .NET Core服务注册与控制器注入
在中,服务通常在Program.cs(.NET 6+)或Startup.cs(.NET 5 及更早)中注册。Program.cs。
2025-04-02 10:00:55
413
原创 .NET Core依赖注入生命周期详解
Core中,依赖注入(DI)通过内置容器管理对象的创建和生命周期,开发者只需在。中注册服务并指定生命周期模式即可。正确选择生命周期可优化性能、避免资源泄漏,并确保依赖关系的正确性。
2025-04-02 09:53:08
586
原创 .NET Core异常处理中间件配置指南
在 .NET Core 中,异常处理中间件的配置需要根据(开发/生产)选择不同的策略,主要涉及和两个关键方法。
2025-04-01 17:50:11
314
原创 跨域请求CORS配置方法详解
处理跨域请求(CORS)需要通过服务器配置策略,确保不同源的客户端(如浏览器)能安全访问资源。在指定允许访问的源(域名),支持通配符(慎用)或具体域名。允许的 HTTP 方法(如GETPOSTPUT允许客户端携带的请求头(如(可选)是否允许发送 Cookie(需与配合使用)。复杂请求(如)会触发OPTIONSOPTIONS。
2025-04-01 17:03:03
591
原创 中间件执行顺序与自定义方法详解
中间件在.NET Core中扮演着构建请求处理管道的关键角色。每个中间件负责处理传入的HTTP请求或响应,按顺序执行,并决定是否将请求传递给下一个中间件或直接终止管道。这种设计允许模块化地处理日志记录、身份认证、静态文件服务等任务,提升灵活性和可维护性。
2025-04-01 16:32:50
364
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人