理解后端开发中的责任链设计模式
来源:dev.to
时间:2024-11-02 13:37:05 108浏览 收藏
从现在开始,努力学习吧!本文《理解后端开发中的责任链设计模式》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!
责任链 (cor) 设计模式是一种强大的行为模式,可以显着增强后端开发。此模式允许您通过处理程序链传递请求,其中每个处理程序可以处理请求或将其传递到下一个处理程序。在本博客中,我们将从后端角度探讨 cor 模式,特别关注其在 web 服务中的请求验证和处理中的应用,并使用 java 作为示例。
何时使用责任链模式
责任链模式在后端系统中特别有用,其中请求可能需要多个验证和处理步骤才能最终确定。例如,在 restful api 中,传入请求在由主要业务逻辑处理之前可能需要验证身份验证、授权和数据完整性。这些问题中的每一个都可以由链中的不同处理程序来处理,从而允许明确分离职责和模块化代码。这种模式在中间件架构中也很有用,其中不同的中间件组件可以处理请求,从而实现基于特定标准的灵活处理。
责任链模式的结构
cor 模式由三个关键组件组成:处理程序、具体处理程序和客户端。 handler 定义处理请求的接口并维护对链中下一个处理程序的引用。每个具体处理程序实现特定类型请求处理的逻辑,决定是处理请求还是将其传递给下一个处理程序。 client 将请求发送到处理程序链,但不知道哪个处理程序将最终处理该请求。这种解耦提高了后端系统的可维护性和灵活性。
java 实现示例
第 1 步:定义处理程序接口
首先,我们将定义一个 requesthandler 接口,其中包含设置下一个处理程序和处理请求的方法:
abstract class requesthandler { protected requesthandler nexthandler; public void setnext(requesthandler nexthandler) { this.nexthandler = nexthandler; } public void handlerequest(request request) { if (nexthandler != null) { nexthandler.handlerequest(request); } } }
第 2 步:创建具体处理程序
接下来,我们将创建扩展 requesthandler 类的具体处理程序类,每个类负责请求处理的特定方面:
class authenticationhandler extends requesthandler { @override public void handlerequest(request request) { if (request.isauthenticated()) { system.out.println("authentication successful."); super.handlerequest(request); } else { system.out.println("authentication failed."); request.setvalid(false); } } } class authorizationhandler extends requesthandler { @override public void handlerequest(request request) { if (request.isauthorized()) { system.out.println("authorization successful."); super.handlerequest(request); } else { system.out.println("authorization failed."); request.setvalid(false); } } } class datavalidationhandler extends requesthandler { @override public void handlerequest(request request) { if (request.isdatavalid()) { system.out.println("data validation successful."); super.handlerequest(request); } else { system.out.println("data validation failed."); request.setvalid(false); } } } class businesslogichandler extends requesthandler { @override public void handlerequest(request request) { if (request.isvalid()) { system.out.println("processing business logic..."); // perform the main business logic here } else { system.out.println("request is invalid. cannot process business logic."); } } }
第 3 步:设置链条
现在,我们将根据处理程序的职责来设置处理程序链:
public class requestprocessor { private requesthandler chain; public requestprocessor() { // create handlers requesthandler authhandler = new authenticationhandler(); requesthandler authzhandler = new authorizationhandler(); requesthandler validationhandler = new datavalidationhandler(); requesthandler logichandler = new businesslogichandler(); // set up the chain authhandler.setnext(authzhandler); authzhandler.setnext(validationhandler); validationhandler.setnext(logichandler); this.chain = authhandler; // start of the chain } public void processrequest(request request) { chain.handlerequest(request); } }
第四步:客户端代码
以下是客户端代码与请求处理链交互的方式:
public class main { public static void main(string[] args) { requestprocessor processor = new requestprocessor(); // simulating a valid request request validrequest = new request(true, true, true); processor.processrequest(validrequest); // simulating an invalid request request invalidrequest = new request(true, false, true); processor.processrequest(invalidrequest); } }
支援班
这是一个简单的 request 类,用于封装请求数据:
class request { private boolean authenticated; private boolean authorized; private boolean datavalid; private boolean valid = true; public request(boolean authenticated, boolean authorized, boolean datavalid) { this.authenticated = authenticated; this.authorized = authorized; this.datavalid = datavalid; } public boolean isauthenticated() { return authenticated; } public boolean isauthorized() { return authorized; } public boolean isdatavalid() { return datavalid; } public boolean isvalid() { return valid; } public void setvalid(boolean valid) { this.valid = valid; } }
输出说明
当您运行客户端代码时,您将观察到以下输出:
Authentication successful. Authorization successful. Data validation successful. Processing business logic... Authentication successful. Authorization failed. Request is invalid. Cannot process business logic.
- 第一个请求已通过所有处理程序成功处理,证明整个链按预期工作。
- 第二个请求在授权步骤期间失败,停止进一步处理并防止无效请求到达业务逻辑。
责任链模式的好处
关注点分离:每个处理程序都有不同的职责,使代码更易于理解和维护。这种分离使团队能够专注于请求处理的特定方面,而不必担心整个工作流程。
灵活的请求处理:可以在不改变现有逻辑的情况下添加或删除处理程序,从而可以轻松适应新的需求或业务规则的变化。这种模块化支持敏捷开发实践。
提高可维护性:处理程序的解耦性质意味着一个处理程序中的更改(例如更新验证逻辑)不会影响其他处理程序,从而最大限度地降低了向系统引入错误的风险。
更轻松的测试:可以单独测试各个处理程序,从而简化测试过程。这允许有针对性的单元测试和更直接地调试特定请求处理步骤。
缺点
性能开销:长链处理程序可能会带来延迟,特别是在需要顺序执行许多检查的情况下。在性能关键型应用程序中,这可能会成为一个问题。
流程控制的复杂性:虽然该模式简化了各个处理程序的职责,但它可能会使请求处理的整体流程变得复杂。了解如何通过多个处理程序处理请求可能需要新团队成员提供额外的文档和精力。
结论
责任链模式是后端开发中的一种有效设计模式,它通过促进关注点分离、灵活性和可维护性来增强请求处理。通过实现这种请求验证和处理模式,开发人员可以创建能够有效处理各种需求的强大且可扩展的系统。无论是在 restful api、中间件处理还是其他后端应用程序中,采用 cor 模式都可以带来更简洁的代码和改进的架构设计,最终带来更可靠和可维护的软件解决方案。
到这里,我们也就讲完了《理解后端开发中的责任链设计模式》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
128 收藏
-
376 收藏
-
386 收藏
-
178 收藏
-
129 收藏
-
413 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习