《一种个性化逻辑定制与类置换方案》

news2024/12/25 1:58:33

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • 背景技术
    • 发明目的
    • 具体方案
    • 实施案例
    • 特征描述
    • 总结陈词

CSDN.gif

写在前面的话

本篇文章分享一下公司实战开发中关于《一种个性化逻辑定制与类置换方案》的方案说明。

推荐文章 - 程序猿入职必会:
《程序猿入职必会(1) · 搭建拥有数据交互的 SpringBoot 》
《程序猿入职必会(2) · 搭建具备前端展示效果的 Vue》
《程序猿入职必会(3) · SpringBoot 各层功能完善 》
《程序猿入职必会(4) · Vue 完成 CURD 案例 》
《程序猿入职必会(5) · CURD 页面细节规范 》
《程序猿入职必会(6) · 返回结果统一封装》
《程序猿入职必会(7) · 前端请求工具封装》
《程序猿入职必会(8) · 整合 Knife4j 接口文档》
《程序猿入职必会(9) · 用代码生成器快速开发》
《程序猿入职必会(10) · 整合 Redis(基础篇)》
《程序猿入职必会(11) · 整合 Redis 实战运用》

推荐文章 - 学会 SpringMVC 系列
《学会 SpringMVC 系列 · 基础篇》
《学会 SpringMVC 系列 · 剖析篇(上)》
《学会 SpringMVC 系列 · 剖析入参处理》
《学会 SpringMVC 系列 · 剖析出参处理》
《学会 SpringMVC 系列 · 返回值处理器》
《学会 SpringMVC 系列 · 消息转换器 MessageConverters》
《学会 SpringMVC 系列 · 写入拦截器 ResponseBodyAdvice》
《学会 SpringMVC 系列 · 剖析初始化》
《学会 SpringMVC 系列 · 参数解析器 ArgumentResolvers》


背景技术

在医疗软件信息行业中,通常不同医院的实际业务流程大相径庭,深究具体业务细节则差异化更加明显,因此,院内医疗信息化相关的业务系统往往无法做到只使用同一个版本,就可以满足或兼容所有医院或场景的需求。而这种情况对医疗信息化厂商而言,他们则需要投入更多的精力用于客户需求定制的满足上。
普遍的做法是针对复杂业务系统直接使用多个版本,不同医院或者某一区域内的医院采用独立的一个版本,这种方式优点是代码较清晰,但开发和维护成本将是成倍的增加。若不想使用多版本,通常的解决方案是通过指定医院级别的参数管理,不同参数执行不同的分支流程,但这将会让原有代码逻辑越来越臃肿,也容易产生逻辑异常。当然,也可以选择引入规则引擎或工作流引擎,以低耦合方式执行附加逻辑,但此举只适合于特定的流程类型场景。
无论上述哪种方式,在灵活性和细化程度上都受到限制,同时,为了达到定制需求的目的,所投入的管理成本也将相对较高。如何解决上述问题,输出一套定制程度高、代码灵活性高、管理成本低的个性化定制解决方案,是一个难题。


发明目的

本方案发明目的旨在提供一套适用于个性化定制程度较高的信息化场景的解决方案。支持通过灵活的可视化配置方式,进行附加业务逻辑的定义、调整、组合等操作。支持执行内部代码方法、执行SQL语法段、触发HTTP请求、全类逻辑替换后执行等多种逻辑类型。支持接入方系统通过面向切面、手动埋点、全类替换等多种方式进行附加逻辑的接入。
引入该个性化逻辑定制和类置换方案后,业务系统可以灵活的根据自己实际需要,在合适的位置执行合适的逻辑,同时新产品上线时,可以用全局一览的方式进行附加逻辑和流程节点定制,轻松应对各种个性化定制需求场景


具体方案

本方案独立于具体业务系统与数据结构,旨在提供一套定制程度高、代码灵活性高、管理成本低的个性化定制问题解决方案,分为三个核心模块:可视化逻辑配置、附加逻辑接入、附加逻辑执行。

可视化逻辑配置
1、支持通过可视化逻辑配置界面,定义业务所需的附加业务逻辑,逻辑可选类型包含但不限于执行SQL语法段、触发HTTP请求、执行内部代码方法、全类逻辑替换等,不同类型逻辑有不同的配置信息和属性结构;
2、附加业务逻辑,可以单独存在,也可以使用拖拽的方式进行组合,从而形成附加逻辑组,组合内的附加业务逻辑支持优先级排序、共享全局变量、出入参衔接等特性。同时,组合后的附加逻辑组,其具体行为等同于单个附加逻辑;
3、附加业务逻辑,支持出入参定制修改,入参可以应用在附加逻辑的各个位置,利用正则表达式替换,允许添加入参校验,也允许利用变量配置进行入参二次转换。出参支持格式化、节点重命名等返回前拦截修改的特性;
4、附加业务逻辑,还支持指定生效代码范畴、指定触发前置条件、异常处理逻辑配置等高级属性;
5、配置页面支持按场景绑定附加业务逻辑或组合逻辑,支持按场景进行最小化配置业务逻辑,同时支持灵活开关和模板复用;

附加逻辑的接入
本方案基于AOP、监听器、拦截器、动态代理、反射机制、自定义注解、自定义类加载器等技术实现。将定义好的附加逻辑,根据预绑定的接入规则,允许接入方采用选择相对应的方式接入。
常见接入方式包含但不限于如下模式:
1、支持以面向切面方式(AOP),被动触发附加业务逻辑
接入方只需要在类或者方法上添加相应的预置注解,由本方案在指定的触发时机主动触发相应附加逻辑,不需要接入方改动业务内部逻辑。触发时机包含不限于前置附加、后置附加、环绕包裹附加、返回结果后抛出异常后附加等方式。
本模式的特点是:面向切面、低耦合、低侵入,适合大范围添加公用逻辑,常用于日志记录、事务管理、权限验证、性能监测等。
2、支持以手动代码埋点()的方式,主动触发附加业务逻辑
接入方只需要在想要执行附加逻辑的具体的代码行,添加相应埋点,当执行到此代码行时,将执行附加业务逻辑。埋点可以是预置的Client工具类、注入Bean操作或者标准HTTP模式。
本模式的特点是:更加灵活的选择触发时机,入参自由组合,出参自由操作,适用范围较广。
3、支持以类置换()的方式,将原逻辑替换为附加业务逻辑
该模式通过将附加逻辑绑定到全类置换的方式,在线可视化编辑代码,生成CLASS文件,并根据全限定类名,进行逻辑替换。本模式不需要添加注册和手动埋点,项目初始化监听器中,直接通过JVM类加载器,动态加载编辑后的类文件,实现逻辑替换,对接入方是无感的。
本模式的特点是:全类逻辑替换,适合逻辑需要大幅度变更的场景。

附加逻辑的执行
在接入方完成附加逻辑的接入后,将根据接入规则不同,在项目运行的合适时机,进行附加逻辑的执行。
本方案的执行根据逻辑类型,包含但不限于如下方式:
1、执行接入方内部代码
该附加规则在定义时,通过指定接入方某逻辑的全限定类名+方法,绑定了具体执行内容。
当符合指定的触发时机时,本专利方案将通过反射机制,在程序运行时,得到该附加逻辑对应的类和方法,同时创建对象并执行相应的方法。
2、执行SQL语法段
该附加规则在定义时,通过维护原生SQL或Mybatis动态SQL内容,并指定执行数据源。
当符合指定的触发时机时,本专利方案将先切换数据源,然后针对附加语法配置和参数信息,完成语法解析和替换,最终执行获得结果。
3、触发远程调用请求
该附加规则在定义时,通过指定需要调用的远程地址,并指定请求类型是HTTP或WebService,同时预定义了参数、请求头、以及其他远程调用额外属性。
当符合触发时机后,本专利方案将读取远程调用请求的配置,选择相应的远程请求工具,完成远程调用请求。
4、全类逻辑替换:通过JVM类加载器,动态加载类文件,实现逻辑代码替换,替换后的类,按正常方式调用与执行,即可在运行时将默认逻辑改为线上编辑后的版本。
image.png


实施案例

案例1:后置附加逻辑执行接入方内部代码的场景
某个性化定制需求,要求若干业务接口在完成逻辑操作后,需要调用一段内部的公用代码,如何在不改变代码的情况下满足这一需要。
具体步骤如下:
1、在个性化定制平台预定义一个附加逻辑,其类型是”执行接入方内部代码“,指定接入方某逻辑的全限定类名和方法信息,并按需配置该附加逻辑的出入参以及其他高级属性;
2、原业务逻辑只需要在方法上,添加相应注解标识即可,不需要改动其他代码,也可以通过配置平台指定该附加逻辑的生效范畴;
3、本方案将在项目初始化监听器中,以扫描业务代码注解或读取附加逻辑生效范畴等方式,将代码逻辑和附加逻辑以合适的触发时机绑定;
4、当业务代码执行完毕后,将自动触发附加逻辑,该附加逻辑将读取全限定类名+方法,并利用反射机制,创建对象并执行相应的方法,最终达到个性化定制目的。

案例2:全类逻辑置换后执行的场景
某个性化定制需求,要求某业务逻辑代码,直接根据该需求进行定制开发,而不采用分支判断的方式。
具体步骤如下:
1、在个性化定制平台预定义一个附加逻辑,其类型是”全类逻辑替换后执行“,指定需要替换类的全限定类名等信息,线上编辑类的具体代码,但要与原类保持结构一致;
2、原业务逻辑在调用涉及到个性化定制操作的类时,需要使用提供的客户端工具类发起调用,原操作对象作为参数传递;
3、本方案在项目初始化监听器中,将读取类型为”全类逻辑替换后执行“的附加逻辑,根据全限定类名的等信息,对此类型客户端工具类发起的交互做出动态代理操作;
4、执行时,通过自定义类加载器,动态加载编辑后类文件,然后利用反射机制,完成逻辑操作;


特征描述

1.本方案提供一套适用于个性化定制程度较高的信息化场景的解决方案,支持通过灵活的可视化配置方式,进行附加业务逻辑的定义、调整、组合等操作,轻松应对各种个性化定制需求场景;
2、本方案支持多种附加逻辑接入方案,包含但不限于面向切面、手动埋点、全类替换等;
3、本方案支持多种附加逻辑类型,包含但不限于执行内部代码方法、执行SQL语法段、触发HTTP请求、全类逻辑替换后执行等;


总结陈词

💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

CSDN_END.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过违法app发现大量网站被挂黑页

免责声明:文章来源于真实事件,关键信息已经打码处理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一…

AI搜索的商业模式困境:Perplexity从拒绝广告到高价广告的转变

随着人工智能技术的发展,AI搜索逐渐成为人们日常生活中不可或缺的一部分。在这个领域,Perplexity曾被认为是AI搜索领域的领军企业,以其强大的智能搜索能力脱颖而出。然而,随着OpenAI的SearchGPT发布在即,Perplexity似乎…

掌握结构型模式——全景回顾

在前几篇文章中,我们详细探讨了多种结构型设计模式,今天来进行一个大总结——结构型设计模式主要关注类与对象的组合和组织,确保我们能够构建出稳固、灵活且易于维护的软件系统。无论你是初学者还是有经验的开发者,这篇文章都会帮…

计算循环冗余码(CRC)--软考笔记

1、什么是CRC循环冗余码(CRC) CRC(Cyclic Redundancy Check)是一种用于检测数据传输错误的校验码。它通过一个预定义的生成多项式来计算一个固定长度的校验值,这个值被附加到原始数据上一起发送。接收端使用相同的生成…

二叉树 - 完全二叉树的节点个数

222. 完全二叉树的节点个数 方法一:递归 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? nul…

多商户2.3.0后台顶部添加修改密码修复方法

问题:后台登录不能修改自己的密码; 解决方法: 修改前端代码,文件路径(平台后台,商户后台一样的修改方法):src/layout/navBars/breadcrumb/user.vue 修改第一处 代码: 修…

IM即时通讯给娱乐社交、游戏等行业带来了什么影响?看这篇就知道

企业IM即时通讯技术的发展和应用,对我们的生活、工作、沟通和交流带来了显著的影响和改变。 IM即时通讯技术的发展不仅改变了我们的沟通方式,还提高了工作效率,促进了团队协作,保障了信息安全,并推动了业务创新。随着技…

机器人学导论之连杆参数

目录 一、连杆参数[1] 二、将下肢看作二连杆结构 三、参考文献 一、连杆参数[1] 1.1关节角 绕轴,从旋转到的角度。 备注:从z轴正方向看,顺时针为正,逆时针为负。 图 1 平面三连杆操作臂 以图1为例子, 表示…

文献解读-农业-第二十九期|《β-淀粉酶和磷脂酸参与板栗种子萌发》

关键词:农业;基因测序;变异检测; 文献简介 标题(英文):Beta-amylase and phosphatidic acid involved in recalcitrant seed germination of Chinese chestnut标题(中文&#xff09…

岩土工程中的渗流问题:有限单元法的理论与实践

有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。尽管各类商业软件使用方便,但其使用对用户来说往往是一个“黑箱子”。相比而言,开源的有限元程序计算方法透明、计算过程可控,…

宝藏!盟主自控独家讲义:《掌中宝》(精卫篇)1-9章:甄选部分

本文内容,全部选自自动化考研联盟的:盟主自控独家讲义:《掌中宝》(精卫篇)。 Part1:资料封面&目录 Part2:资料各个章节具体内容 自控专属数学基础储备 第1章 自动控制的基本概念 第2章 控制系统的数学模型 第3章…

8.26算法训练

1.八皇后 Checker Challenge 输入: 6输出: 2 4 6 1 3 5 3 6 2 5 1 4 4 1 5 2 6 3 4是以前寒假写过的题目,所以有的影响,大致思路就是用深度遍历然后判断是否在对角线上就ok了,有大概思路的话, 还是不难的…

比特币的签名和验证(基于ECDSA)

比特币(Bitcoin)和以太坊(Ethereum)等区块链技术使用了加密算法来确保交易的安全性。私钥签名和公钥验证是这些算法的核心部分,主要用于证明交易的发起者拥有交易中使用的资金的控制权,而不需要暴露私钥本身…

【开源分享】java+swing+mysql简单学生信息管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片,希望和大家…

大模型学习全面教程:零基础入门至精通,一篇文章全掌握

人人都看得懂的大模型简介 大模型就像一座庞大的图书馆,里面有非常多的书籍。但与普通图书馆不同的是,这座图书馆中的每本书都是关于不同事物的描述和知识。而这些书籍中的每一页都代表了这个事物的一些特征或细节。现在,想象一下&#xff0…

蓝牙耳机哪个品牌最具有性价比?四大性价比拉满产品推荐!

蓝牙耳机哪个品牌最具有性价比?目前市面上的蓝牙耳机层出不重,蓝牙耳机的的品类也五花八门的,想要选择一款满意的蓝牙耳机也是需要花费一定的时间,大家购买时一定要格外注意,劣质耳机产品不仅使耳朵受到伤害&#xff0…

Python与Plotly实现多维度数据的动态可视化——交互式股票价格

目录 准备工作安装必要的库导入库 获取数据数据预处理创建交互式图表方法一:基本多线图方法二:带有滚动和区间选择的交互式图表方法三:可视化股票每日回报率的箱线图方法四:添加注释和标记的交互式图表 完整代码 在金融数据分析中…

ubuntu 小技巧 upower 查看电源模块之电池等功能

电脑使用时间久了,电池不耐用了,查看一下具体还剩多少容量,怎么看? ros2ros2-aspire4741:~$ upower -e /org/freedesktop/UPower/devices/battery_BAT0 /org/freedesktop/UPower/devices/line_power_ADP1 /org/freedesktop/UPowe…

C++ TinyWebServer项目总结(11. 定时器)

网络程序需要处理定时事件,如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,有效地组织这些定时事件,使其在预期的时间被触发且不影响服务器的主要逻辑,对于服务器的性能有至关重要的影响。为此,…

“信”欣向荣,共“创”共赢 | 华宇TAS应用中间件认证工程师培训报名通道开启

信创,即“信息技术应用创新”。我国自主信息产业聚焦信息技术应用创新,旨在通过对IT硬件、软件等各个环节的重构,基于我国自有IT底层架构和标准,形成自有开放生态,从根本上解决本质安全问题,实现信息技术可…