wordpress cms下载地址,seo监控系统,做一个网站的流程是什么,高新网站开发建设多少钱利用模板模式和责任链模式实现数据校验 一、业务背景二、模板模式和责任链模式代码实现1、数据校验抽象处理器ValidateHandler2、数据校验责任链工具类ValidateChainUtil3、网元调整数据校验抽象类AbstractNodeCheckHandler4、依次定义3个责任链handler#xff0c;通过Order注… 利用模板模式和责任链模式实现数据校验 一、业务背景二、模板模式和责任链模式代码实现1、数据校验抽象处理器ValidateHandler2、数据校验责任链工具类ValidateChainUtil3、网元调整数据校验抽象类AbstractNodeCheckHandler4、依次定义3个责任链handler通过Order注解控制执行顺序 三、测试验证四、项目结构及源码 一、业务背景
对项目进行微重构的需求任务中发现有个旧业务代码一个Service的离线校验网元方法中竟然有将近12个逻辑校验代码非常臃肿可维护性大打折扣。因此需要对这个方法进行重构这里简单记录下涉及的重构方法算是抛砖引玉。
二、模板模式和责任链模式代码实现
1、数据校验抽象处理器ValidateHandler
/*** 数据校验抽象处理器** author huahua* DATE 2024/8/9**/
public abstract class ValidateHandlerT {private ValidateHandlerT next;public void setNext(ValidateHandlerT next) {this.next next;}public abstract void doValidate(T validateData);public void next(T validateData) {if (next null) {return;}next.doValidate(validateData);}
}2、数据校验责任链工具类ValidateChainUtil
/*** 数据校验责任链工具类** author huahua* DATE 2024/8/9**/
public class ValidateChainUtil {public static T void doValidateChain(ListValidateHandlerT chainNodeList, T validateData) {if (CollectionUtils.isEmpty(chainNodeList)) {return;}// 初始化调用链所有节点for (int i 0; i chainNodeList.size()-1; i) {chainNodeList.get(i).setNext(chainNodeList.get(i 1));}// 取第一个节点进行校验chainNodeList.get(0).doValidate(validateData);}
}3、网元调整数据校验抽象类AbstractNodeCheckHandler
/*** 网元调整数据校验抽象类** author huahua* DATE 2024/8/9**/
Component
public abstract class AbstractNodeCheckHandler extends ValidateHandlerNode {/*** 基础校验参数是否为空** param node*/public void checkParam(Node node) {if (node null) {throw new RuntimeException(node is empty);}}
}4、依次定义3个责任链handler通过Order注解控制执行顺序
NodeCheckInitHandler
/*** 网元校验信息初始化处理器** author huahua* DATE 2024/8/9**/
Component
Order(100)
public class NodeCheckInitHandler extends AbstractNodeCheckHandler {Overridepublic void doValidate(Node node) {System.out.println(执行校验node是否在数据库中业务逻辑......);// 初始化校验结束进入下一个节点next(node);}
}NodeCheckPermissionHandler
/*** 网元字段权限校验处理器** author huahua* DATE 2024/8/9**/
Component
Order(200)
public class NodeCheckPermissionHandler extends AbstractNodeCheckHandler {Overridepublic void doValidate(Node node) {System.out.println(执行校验网元字段权限业务逻辑.......);// 网元字段权限校验通过执行下一逻辑next(node);}
}NodeCheckPoolHandler
/*** 网元资源池校验处理类** author huahua* DATE 2024/8/9**/
Component
Order(300)
public class NodeCheckPoolHandler extends AbstractNodeCheckHandler {Overridepublic void doValidate(Node node) {System.out.println(执行网元资源池校验业务逻辑.......);// 网元资源池校验通过执行下一逻辑next(node);}
}三、测试验证
通过访问接口可以看到控制台能够按照顺序正确执行数据校验逻辑利用模板模式和责任链模式实现数据校验正确结果得到验证 四、项目结构及源码 源码下载地址如下欢迎Star demo-springboot-mybatisplus