CN114546351A - 一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备 - Google Patents
一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备 Download PDFInfo
- Publication number
- CN114546351A CN114546351A CN202210081905.0A CN202210081905A CN114546351A CN 114546351 A CN114546351 A CN 114546351A CN 202210081905 A CN202210081905 A CN 202210081905A CN 114546351 A CN114546351 A CN 114546351A
- Authority
- CN
- China
- Prior art keywords
- slice
- layer
- frame
- key
- parameter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备,当传入参数类型为基础类型时,利用Segment对象,将使用版本信息作为其层结构Layer名称,传入使用版本相对应的参数,把整个Segment对象作为参数来统一出参和入参,通过判断识别层结构Layer的名称,获取参数执行对应的逻辑,不同使用版本可共用公共逻辑,大幅减少不必要的函数重载;当传入参数类型为对象类型时,从层结构Layer、片结构Slice和帧结构Frame中区分出对应参数,触发冻结标志,通过freeze方法冻结对应参数,禁止修改特定参数,从而实现引用对象内部修改其余目标参数的目的;还避免数据持久化端重复计算,也避免依赖第三方缓存来提高效率。
Description
技术领域
本发明属于通信技术领域,尤其涉及一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备。
背景技术
Java语言被广泛应用与后台应用服务,为前端提供各种服务,包括手机、电脑、浏览器等,而其中很多都使用了MVC模型,即视图、模型和控制器,在代码结构中则分为服务端、业务处理端和数据持久化端,一般而言,一个业务逻辑数据从服务端传递至业务处理端做逻辑判断,在传递至数据持久化端进行保存,在通过业务处理端返回结果至服务端。
随着用户需求和业务需求的不断扩展,衍生出很多版本的前端和对应的后台API,由于后台API需要兼容不同版本的前端,导致多函数不断重载,由此至少带来以下几个问题:
1、如果业务处理端中函数使用的是基础类型的参数,可能会出现有重复的参数个数及类型,导致函数需要改名称,由此导致维护代码的难度增加;
2、如果使用类作为参数传递,新增需求就必须修改类,增加更多的类属性,而在某些业务逻辑中,类的某些属性是不能被修改的,使用类作为参数传递Java是不支持引用对象内部禁止修改,因此如果程序开发人员不小心修改了对象内部属性值,则会导致整个应用出错;
3、另外在三层架构中,经常服务与服务之间会相互调用,但在服务内部可能一些逻辑需要重复计算,进而影响计算处理性能,特别是执行数据持久化端的操作,目前解决以上问题一般是通过方法重载,或者依赖于第三方缓存,但一般前者会导致代码膨胀,后者则增加部署难度或牺牲系统稳定性(缓存穿透,缓存击穿,缓存雪崩等问题)。
发明内容
为了克服现有技术的不足,本发明的目的在于提供一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备,主要用于解决现有技术中需要大量重载、引用对象内的属性无法冻结修改、在特殊情况下编程复杂度高等问题。
为解决上述问题,本发明所采用的技术方案如下:
第一方面,本发明提供一种基于Java MVC架构的统一出参入参封装类结构,包括Segment对象,所述Segment对象包括多个层结构Layer、三个键值对集合、一个冻结标志和两个实例化构造函数,每个所述层结构Layer包括至少一个片结构Slice,每个所述片结构Slice包括至少一个帧结构Frame;
所述层结构Layer中包括当前使用层结构Layer,所述当前使用层结构Layer为所述Segment对象当前使用的Layer对象变量;
三个所述键值对集合中的其中两个分别为持久化键值对集合和临时存储键值对集合,另外一个键值对集合为其键为Layer的名称、值为Layer的实例化对象;
两个所述实例化构造函数分别为带名称参数的构造函数和无参数构造函数。
进一步地,所述当前使用层结构Layer对应有至少一个片结构Slice、一个名称变量、三个键值对集合、一个冻结标志和一个构造函数,所述片结构Slice存储在所述当前使用层结构Layer的键值对集合中;
所述片结构Slice中包括当前使用片结构Slice,所述名称变量定义为所述当前使用层结构Layer的名称;
三个所述键值对集合中的其中两个分别为持久化键值对集合和临时存储键值对集合,另外一个键值对集合为其键为Slice的名称、值为Slice的实例化对象;
所述构造函数为带参数实例化构造函数。
进一步地,所述当前使用片结构Slice对应有至少一个帧结构Frame、一个名称变量、三个键值对集合、一个冻结标志和一个构造函数,所述帧结构Frame存储在所述当前使用片结构Slice的键值对集合中;
所述帧结构Frame中包括当前使用帧结构Frame,所述名称变量定义为所述当前使用片结构Slice的名称;
三个所述键值对集合中的其中两个所述键值对集合分别为持久化键值对集合和临时存储键值对集合,另外一个键值对集合为其键为Frame的名称、值为Frame的实例化对象;
所述构造函数为带参数实例化构造函数。
进一步地,所述当前使用帧结构Frame被定义为当前帧名称变量,所述当前使用帧结构Frame内部可包含0个或多个内部参数对象,还包括有参数对象列表、一个帧名称、一个冻结标志和一个构造函数;
当所述当前使用帧结构Frame内部包含有内部参数对象时,所述内部定义参数对象被存放于所述当前使用帧结构Frame内部的参数对象列表内;
所述构造函数为带参数实例化构造函数。
进一步地,所述内部定义参数对象包括UUID、参数名称属性和值。
第二方面,本发明还一种基于Java MVC架构的统一出参入参封装方法,包括以下步骤:
服务端接收客户端的数据请求,判断传入参数类型;
确定为基础类型后,将数据封装至Segment对象,所述Segment对象的层结构Layer名称为使用版本信息;
所述服务端将Segment对象传送至业务处理端,所述业务处理端识别所述层结构Layer的名称,并根据对应的所述使用版本信息执行相应逻辑动作;
所述业务处理端将执行完逻辑动作的Segment作为入参对象传输至数据持久化端,所述数据持久化端将Segment作为出参对象通过业务处理端返回至所述服务端,所述服务端提取目标对象、并返回至客户端。
进一步地,函数根据业务需要通过层结构Layer、片结构Slice或帧结构Frame中的名称在层结构Layer、片结构Slice和帧结构Frame中获取所需参数。
进一步地,在层结构Layer、片结构Slice和帧结构Frame中区分出对应参数后,触发冻结标志,通过freeze方法冻结对应参数。
进一步地,当服务业务之间存在函数相互调用时,定义第一服务业务,所述第一服务业务调用完数据持久化端中的处理函数后,将处理数据保存至Segment对象的持久化键值对集合或临时存储键值对集合中,再传输至其余至少一个服务业务;
其余所述服务业务判断是否有同一处理函数的执行结果,若有,则直接读取Segment对象。
第三方面,本发明还提供一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述的方法。
相比现有技术,本发明的有益效果在于:
当传入参数类型为基础类型时,利用Segment对象,将使用版本信息作为其层结构Layer名称,传入使用版本相对应的参数,把整个Segment对象作为参数来统一出参和入参,通过判断识别层结构Layer的名称,获取参数执行对应的逻辑,不同使用版本可共用公共逻辑,大幅减少不必要的函数重载;
当传入参数类型为对象类型时,在必要时,从层结构Layer、片结构Slice和帧结构Frame中区分出对应参数,触发冻结标志,通过freeze方法冻结对应参数,禁止修改特定参数,从而实现引用对象内部修改其余目标参数的目的;
在服务业务之间存在函数相互调用时,提前将处理数据保存至Segment对象中,其余服务业务只需判断是否有执行结果,则可直接读取Segment对象,避免数据持久化端重复计算,也避免依赖第三方缓存来提高效率。
下面结合附图和具体实施方式对本发明作进一步详细说明。
附图说明
利用附图对本发明作进一步说明,但附图中的实施例不构成对本发明的任何限制,对于本领域的普通技术人员,在不付出创造性劳动的前提下,还可以根据以下附图获得其它的附图。
图1是本发明的一种基于Java MVC架构的统一出参入参封装类结构的示意图。
图2是本发明的一种基于Java MVC架构的统一出参入参封装方法的流程示意图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,当描述到特定器件位于第一器件和第二器件之间时,在该特定器件与第一器件或第二器件之间可以存在居间器件,也可以不存在居间器件。当描述到特定器件连接其它器件时,该特定器件可以与所述其它器件直接连接而不具有居间器件,也可以不与所述其它器件直接连接而具有居间器件。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
申请人发现:
对于不断新增的用户需求和为了兼容旧的前端版本(用户手机的应用不可能全都是最新版本不同版本的功能,后台返回的数据可能不尽相同),一般前端会传给后台版本号,后台自动选择对应服务端,服务端调用对应版本业务处理端中的函数,函数进行运算后返回结果给服务端,最后返回到前端。但是目前的现有技术中存在需要大量重载、引用对象内的属性无法冻结修改、在特殊情况下编程复杂度高等问题。
有鉴于此,第一方面,参照图1,在本实施例中公开了一种基于Java MVC架构的统一出参入参封装类结构,包括Segment对象,Segment对象包括多个层结构Layer、三个键值对集合、一个冻结标志和两个实例化构造函数,每个层结构Layer包括至少一个片结构Slice,每个片结构Slice包括至少一个帧结构Frame,其中,层结构Layer、片结构Slice、帧结构Frame呈三层架构,在本实施例中,一个层结构Layer对应两个片结构Slice,一个片结构Slice对应两个帧结构Frame,另外地,Segment对象、层结构Layer、片结构Slice、帧结构Frame都是利用代码实现;
在多个层结构Layer中包括当前使用层结构Layer,当前使用层结构Layer为Segment对象当前使用的Layer对象变量,定义一个键值对集合为其键为Layer的名称、值为Layer的实例化对象;
三个所述键值对集合中的其中两个分别为持久化键值对集合(键为字符串,值为Object)和临时存储键值对集合(键为字符串,值为Object),另外一个键值对集合为其键为Layer的名称、值为Layer的实例化对象;
两个实例化构造函数分别为带名称参数的构造函数和无参数构造函数。
当使用带参实例化Segment对象时,参数将作为第一个Layer的名称。目前在实际使用过程中Layer名称就是Java三层架构中应用层的名称。当在Controller中接收到来自客户端的参数,则下一步将实例化Segment对象并且把调用的Service方法的名称(例如getUserName)作为Segment对象的参数,当Segment对象实例化完毕后,Segment对象中就存在名称getUserName的层结构Layer。
以上Segment对象包含有多个层结构Layer,在当前使用过程中指向其中一个层结构Layer,即当前使用层结构Layer。
当前使用层结构Layer对应有至少一个片结构Slice、一个名称变量、三个键值对集合、一个冻结标志和一个构造函数,所述片结构Slice存储在所述当前使用层结构Layer的键值对集合中;
片结构Slice中包括当前使用片结构Slice,名称变量定义为当前使用层结构Layer的名称;
三个所述键值对集合中的其中两个分别为持久化键值对集合(键为字符串,值为Object)和临时存储键值对集合(键为字符串,值为Object),另外一个键值对集合为其键为Slice的名称、值为Slice的实例化对象;
构造函数为带参数实例化构造函数。
需要说明的是,Segment对象包括多个层结构Layer,每个层结构Layer均有自己的命名,这个命名也可用来表示版本、也可用来表示业务类型,并无硬性规定。每一个层结构Layer都有一个名称,创建Segment对象是需要传入一个名称,这个名称为第一个层结构Layer的名称。
以上当前使用层结构Layer包括多个片结构Slice,其中包含一个当前使用片结构Slice和名称为当前使用层结构Layer的名称变量。
进一步地,Layer可以根据需要创建多个Slice,并且在当前的Layer中切换到某个指定的Slice,例如Layer的名字是getUserName,使用者可以创建名字为getUserName1的slice,getUserName2的slice...,并且可以根据需要把Layer为getUserName的当前的slice指向任意一个例如:getUserName2。
当前使用片结构Slice对应有至少一个帧结构Frame、一个名称变量、三个键值对集合、一个冻结标志和一个构造函数,帧结构Frame存储在当前使用片结构Slice的键值对集合中;
帧结构Frame中包括当前使用帧结构Frame,名称变量定义为当前使用片结构Slice的名称;
三个所述键值对集合中的其中两个分别为持久化键值对集合(键为字符串,值为Object)和临时存储键值对集合(键为字符串,值为Object),另外一个键值对集合为其键为Frame的名称、值为Frame的实例化对象;
构造函数为带参数实例化构造函数。
以上当前使用片结构Slice包括多个帧结构Frame,其中包含一个当前使用帧结构Frame和名称为当前使用片结构Slice的名称变量。
当前使用帧结构Frame被定义为当前帧名称变量,当前使用帧结构Frame内部可包含0个或多个内部参数对象,还包括有参数对象列表、一个帧名称、一个冻结标志和一个构造函数;
当前使用帧结构Frame内部包含有内部参数对象时,内部定义参数对象被存放于当前使用帧结构Frame内部的参数对象列表内,在对象列表中定义一个类型为Object的变量存放最终结果,每个Frame都有一个类型为Object的变量存放最终结果;
构造函数为带参数实例化构造函数。
由此可见,层结构Layer、片结构Slice、帧结构Frame都有各自的冻结标记,如果层结构Layer冻结了,它下面的片结构Slice、帧结构Frame都被冻结,片结构Slice冻结了,其下面的所有帧结构Frame都被冻结。
另外地,内部定义参数对象包括UUID(全球唯一码属性)、参数名称属性和值(Java的Object类型)。Segment对象内提供枚举类SegmentType,提供枚举层结构Layer、片结构Slice、帧结构Frame,Segment对象指向内部的层结构Layer、片结构Slice、帧结构Frame。
实施例1:
在本实施例中,将一个层结构Layer作为一个业务,例如用户登录,因此用userLogin来命名层结构Layer,在传统的三层架构中服务器的入口为服务端Controller,在一个服务端Controller里我们就产生一个Segment对象并且命名为该服务端controller的业务名称,服务端controller的下一层一般就是业务处理端Service,而业务处理端Service又可能调用其他的业务处理端Service或数据持久化端Dao,即Segment对象命名为该controller的业务名称;在Segment对象里面的不同层结构layer可以根据业务情况定义名称,当然地,生成Segment对象的时候需要传入一个名称,就是第一个层结构Layer的名称,也可以不传入名称,自动默认生成一个名称,例如改名称为固定值“$Segment_Default_Name$”。
作为本实施例的一种体现,不同Service使用同一个类型的参数(Segment),不同的Service内部只需要切换到自身对应的Layer、Slice或frame就可以获取业务需要的参数,当然地,如果不同Service或Dao所需参数一样,则可以在同一个Layer、Slice或frame中获取,体现出利用Segment对象的灵活性。
第二方面,参照图2,本实施例中公开了一种基于Java MVC架构的统一出参入参封装方法,包括以下步骤:
服务端接收客户端的数据请求,判断传入参数类型,其中客户端的数据请求可以是http请求,也可以是其他形式的请求;
确定为基础类型后,将数据封装至Segment对象,Segment对象的层结构Layer名称为使用版本信息;
服务端将Segment对象传送至业务处理端,业务处理端识别层结构Layer的名称,并根据对应的使用版本信息执行相应逻辑动作,其中,多个不同的使用版本信息指向同一个逻辑动作;
业务处理端将执行完逻辑动作的Segment作为入参对象传输至数据持久化端,数据持久化端将Segment作为出参对象通过业务处理端返回至所述服务端,所述服务端提取目标对象、并返回至客户端。
需要说明的是,在现有技术中,如果传入的参数不同,而Service的方法名称依旧不变,此时Service的函数就需要重载,其中存在基础类型和数量都相同而实际意思不同的情况,此时方法必须修改名称。在本实施例中,可通过Segment对象将使用版本信息作为层结构Layer的名称,传入使用版本相对应的参数,把整个Segment对象作为参数来统一出参和入参,将整个Segment对象作为参数传给业务处理端,在业务处理端方法中通过判断识别层结构Layer的名称,获取参数执行对应的逻辑,其中不同版本的公共逻辑可以共用,大幅减少不必要的函数重载。
在服务端提取目标对象时,可以根据服务端具体需求和规范,从Segment对象中切割出所需的目标对象,此目标对象可以是某个frame的结果,也可以是整个Segment对象,其中体现出Segment对象的特性,无论Segment对象传递到那一层,各业务层只需按各自的需求和规范提取所需的部分,各取所需,可以是任意层结构Layer、片结构Slice和帧结构Frame,且无论如何切割,最后获得的是对应的最小单位的帧结构Frame,帧结构Frame不能切割,帧结构Frame保存最终的运算结果。
函数根据业务需要通过层结构Layer、片结构Slice或帧结构Frame中的名称在层结构Layer、片结构Slice和帧结构Frame中获取所需参数,由业务体内部决定需要用到Segment对象中的具体层结构Layer、片结构Slice和帧结构Frame,如获取参数失败,可通过赋予设定参数或者自动调用设定文档的方式,避免报错。
在一些实施案例中,把传入参数封装至Segment对象,根据业务通过名称在层结构Layer、片结构Slice和帧结构Frame获取函数对应的参数;另外地,必要时,根据业务需要可以在Segment对象传入函数前,或传入函数后,通过freeze方法冻结对应的参数。
需要说明的是,在现有技术中,确定为对象类型后,程序员可能先修改原有的对象,或新增、或删除、或修改某些属性,此时如果程序开发人员不小心修改不当,很容易导致以往版本的逻辑出现问题,如果新增参数对象又会导致代码膨胀。在本实施例中,直接从层结构Layer、片结构Slice和帧结构Frame中区分出对应参数不需要新增任何对象,如果返回至客户端的值包含至少部分传入参数,则为了保证这部分传入参数对象的值不被修改,通过freeze方法冻结对应参数,禁止修改特定参数,从而实现引用对象内部修改其余目标参数的目的。
在一些实施例中,当服务业务之间存在函数相互调用时,定义第一服务业务,第一服务业务中又调用函数A运算出中间变量α,调用完数据持久化端中的处理函数后,将变量α至Segment对象的持久化键值对集合或临时存储键值对集合中,再传输至其余至少一个服务业务;
其余服务业务判断是否有调用函数A的执行结果,若有,则直接读取Segment对象。
需要说明的是,现有技术中,如果服务业务与服务业务之间相互调用,有可能第一服务函数调用的数据持久化端的处理函数与第二服务函数调用的数据持久化端的处理函数一样,这样就会导致数据持久化端的处理函数重复执行。在本实施例中,可以在第一服务业务调用完数据持久化端中的处理函数后,把处理数据根据需要设置到Segment对象的持久化键值对集合或临时存储键值对集合中,再传递给其余服务业务的函数中,其余服务业务方法只需判断是否有同一处理函数的执行结果,就可以判断是否执行数据持久化端中的处理函数,如果需要执行,则直接读取Segment对象,从而避免了数据持久化端重复计算,也避免依赖第三方缓存来提高效率。
当Segment对象的实例对象作为入参时候,只需要通过其addParam方法添加参数和值(如果对应的层结构Layer、片结构Slice、帧结构Frame被冻结则会报错),在方法体内通过setResult方法可以添加返回结果,然后让整个Segment对象的实例对象作为返回参数返回。
在方法体内如果需要多个返回值时,可以通过next方法创建多个帧结构Frame并且逐一使用setResult方法设置返回结果,此时可以在当前使用层结构Layer返回多个结果帧结果。
如果整个系统使用Segment对象作为入参出参,则在方法传递只需要使用统一个对象。只需要不同的函数中切换不同的层结构Layer,甚至在MVC架构的一个业务中使用一个Segment对象打通三个层,MVC不同的层定义Segment对象不同的层结构Layer,M内的函数可以定义层结构Layer不同的片结构Slice,整个业务方法处理更高效。
当禁止函数内修改Segment对象的参数时,可以针对不同的层结构Layer、片结构Slice、帧结构Frame进行冻结,冻结后函数体内就不能修改被冻结的Segment对象内的参数值,如果参数是对象类型,则每次重新获取时,将得到的是第一次设置时的对象,从而保证了数据安全性和程序健壮性,避免开发人员在不知情的情况下修改了数据导致程序错误。
第三方面,本实施例中公开了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,处理器通过运行可执行指令以实现如上述实施例中的基于Java MVC架构的统一出参入参封装方法。
第四方面,本实施例中公开了一种计算机可读存储介质,其上存储有计算机指令,计算机指令被处理器执行时实现如上述实施例中的基于Java MVC架构的统一出参入参封装方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
综上,相对于现有技术,上述实施例提供一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备,当传入参数类型为基础类型时,利用Segment对象,将使用版本信息作为其层结构Layer名称,传入使用版本相对应的参数,把整个Segment对象作为参数来统一出参和入参,通过判断识别层结构Layer的名称,获取参数执行对应的逻辑,不同使用版本可共用公共逻辑,大幅减少不必要的函数重载;
当传入参数类型为对象类型时,从层结构Layer、片结构Slice和帧结构Frame中区分出对应参数,触发冻结标志,通过freeze方法冻结对应参数,禁止修改特定参数,从而实现引用对象内部修改其余目标参数的目的;
在服务业务之间存在函数相互调用时,提前将处理数据保存至Segment对象中,其余服务业务只需判断是否有执行结果,则可直接读取Segment对象,避免数据持久化端重复计算,也避免依赖第三方缓存来提高效率。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。
Claims (10)
1.一种基于Java MVC架构的统一出参入参封装类结构,其特征在于,包括Segment对象,所述Segment对象包括多个层结构Layer、三个键值对集合、一个冻结标志和两个实例化构造函数,每个所述层结构Layer包括至少一个片结构Slice,每个所述片结构Slice包括至少一个帧结构Frame;
所述层结构Layer中包括当前使用层结构Layer,所述当前使用层结构Layer为所述Segment对象当前使用的Layer对象变量;
三个所述键值对集合中的其中两个分别为持久化键值对集合和临时存储键值对集合,另外一个键值对集合为其键为Layer的名称、值为Layer的实例化对象;
两个所述实例化构造函数分别为带名称参数的构造函数和无参数构造函数。
2.根据权利要求1所述的一种基于Java MVC架构的统一出参入参封装类结构,其特征在于,所述当前使用层结构Layer对应有至少一个片结构Slice、一个名称变量、三个键值对集合、一个冻结标志和一个构造函数,所述片结构Slice存储在所述当前使用层结构Layer的键值对集合中;
所述片结构Slice中包括当前使用片结构Slice,所述名称变量定义为所述当前使用层结构Layer的名称;
三个所述键值对集合中的其中两个分别为持久化键值对集合和临时存储键值对集合,另外一个键值对集合为其键为Slice的名称、值为Slice的实例化对象;
所述构造函数为带参数实例化构造函数。
3.根据权利要求2所述的一种基于Java MVC架构的统一出参入参封装类结构,其特征在于,所述当前使用片结构Slice对应有至少一个帧结构Frame、一个名称变量、三个键值对集合、一个冻结标志和一个构造函数,所述帧结构Frame存储在所述当前使用片结构Slice的键值对集合中;
所述帧结构Frame中包括当前使用帧结构Frame,所述名称变量定义为所述当前使用片结构Slice的名称;
三个所述键值对集合中的其中两个所述键值对集合分别为持久化键值对集合和临时存储键值对集合,另外一个键值对集合为其键为Frame的名称、值为Frame的实例化对象;
所述构造函数为带参数实例化构造函数。
4.根据权利要求3所述的一种基于Java MVC架构的统一出参入参封装类结构,其特征在于,所述当前使用帧结构Frame被定义为当前帧名称变量,所述当前使用帧结构Frame内部可包含0个或多个内部参数对象,还包括有参数对象列表、一个帧名称、一个冻结标志和一个构造函数;
当所述当前使用帧结构Frame内部包含有内部参数对象时,所述内部定义参数对象被存放于所述当前使用帧结构Frame内部的参数对象列表内;
所述构造函数为带参数实例化构造函数。
5.根据权利要求4所述的一种基于Java MVC架构的统一出参入参封装类结构,其特征在于,所述内部定义参数对象包括UUID、参数名称属性和值。
6.一种基于Java MVC架构的统一出参入参封装方法,其特征在于,包括以下步骤:
服务端接收客户端的数据请求,判断传入参数类型;
确定为基础类型后,将数据封装至Segment对象,所述Segment对象的层结构Layer名称为使用版本信息;
所述服务端将Segment对象传送至业务处理端,所述业务处理端识别所述层结构Layer的名称,并根据对应的所述使用版本信息执行相应逻辑动作;
所述业务处理端将执行完逻辑动作的Segment作为入参对象传输至数据持久化端,所述数据持久化端将Segment作为出参对象通过业务处理端返回至所述服务端,所述服务端提取目标对象、并返回至客户端。
7.根据权利要求6所述的一种基于Java MVC架构的统一出参入参封装方法,其特征在于,函数根据业务需要通过层结构Layer、片结构Slice或帧结构Frame中的名称在层结构Layer、片结构Slice和帧结构Frame中获取所需参数。
8.根据权利要求7所述的一种基于Java MVC架构的统一出参入参封装方法,其特征在于,在层结构Layer、片结构Slice和帧结构Frame中区分出对应参数后,触发冻结标志,通过freeze方法冻结对应参数。
9.根据权利要求6所述的一种基于Java MVC架构的统一出参入参封装方法,其特征在于,当服务业务之间存在函数相互调用时,定义第一服务业务,所述第一服务业务调用完数据持久化端中的处理函数后,将处理数据保存至Segment对象的持久化键值对集合或临时存储键值对集合中,再传输至其余至少一个服务业务;
其余所述服务业务判断是否有同一处理函数的执行结果,若有,则直接读取Segment对象。
10.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求6至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210081905.0A CN114546351A (zh) | 2022-01-24 | 2022-01-24 | 一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210081905.0A CN114546351A (zh) | 2022-01-24 | 2022-01-24 | 一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114546351A true CN114546351A (zh) | 2022-05-27 |
Family
ID=81671505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210081905.0A Pending CN114546351A (zh) | 2022-01-24 | 2022-01-24 | 一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114546351A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115268924A (zh) * | 2022-06-10 | 2022-11-01 | 知学云(北京)科技股份有限公司 | 一种基于aPaaS平台的公式计算引擎服务方法及系统 |
-
2022
- 2022-01-24 CN CN202210081905.0A patent/CN114546351A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115268924A (zh) * | 2022-06-10 | 2022-11-01 | 知学云(北京)科技股份有限公司 | 一种基于aPaaS平台的公式计算引擎服务方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112395483B (zh) | 基于树形结构的页面渲染方法及装置 | |
US8849870B2 (en) | Method, apparatus and computer program product for providing context triggered distribution of context models | |
CN111859470A (zh) | 一种业务数据上链方法及装置 | |
CN113961510B (zh) | 一种文件处理方法、装置、设备及存储介质 | |
US20090049458A1 (en) | Interface for application components | |
CN109343983B (zh) | 功能模块间的信息交互方法、装置、设备及存储介质 | |
CN111367922A (zh) | 一种数据更新方法及相关设备 | |
CN114546351A (zh) | 一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备 | |
CN111414207A (zh) | 一种页面搭建方法、装置和设备 | |
CN113779452B (zh) | 数据处理方法、装置、设备及存储介质 | |
CN112988062B (zh) | 一种元数据读取限制方法、装置、电子设备及介质 | |
CN115426375A (zh) | 一种数据处理方法和数据处理系统 | |
CN113742050B (zh) | 操作数据对象的方法、装置、计算设备和存储介质 | |
CN110377665B (zh) | 数据同步方法、装置、电子设备及存储介质 | |
CN110960858B (zh) | 一种游戏资源的处理方法、装置、设备及存储介质 | |
CN112068899A (zh) | 插件加载方法、装置、电子设备及存储介质 | |
CN113157722A (zh) | 一种数据处理方法、装置、服务器、系统及存储介质 | |
CN117883789B (zh) | 数据获取方法、装置、设备、可读存储介质及程序产品 | |
CN115190177B (zh) | 请求处理方法、装置、计算机设备、存储介质和程序产品 | |
CN111382200A (zh) | 信息加载方法、装置、服务器及存储介质 | |
CN113364871B (zh) | 一种基于智能合约的节点选举方法、装置及电子设备 | |
CN114866605B (zh) | 网络变更代理方法、装置、电子设备和存储介质 | |
CN118035042B (zh) | 应用程序性能分析方法、装置、电子设备及存储介质 | |
CN111522998B (zh) | 一种图模型的生成方法、装置及设备 | |
CN107609093B (zh) | 一种数据库表监控方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |