CN111694613B - 应用程序模块间的解耦方法、电子装置及存储介质 - Google Patents
应用程序模块间的解耦方法、电子装置及存储介质 Download PDFInfo
- Publication number
- CN111694613B CN111694613B CN202010477735.9A CN202010477735A CN111694613B CN 111694613 B CN111694613 B CN 111694613B CN 202010477735 A CN202010477735 A CN 202010477735A CN 111694613 B CN111694613 B CN 111694613B
- Authority
- CN
- China
- Prior art keywords
- file
- module
- preset
- entity
- analyzing
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及数据处理技术,提供了一种应用程序模块间的解耦方法、电子装置及存储介质。该方法将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至第一文件,将所述第一模块的实体对象存储至第二文件,基于预设正则表达式集解析第一文件及第二文件,得到第一文件与第二文件的函数名、参数名、参数类型、实体属性名及实体属性类型,根据预设的生成规则生成硬编码,将生成的硬编码分别填充至模板文件中生成目标文件,当侦测到第二模块发出调用第一模块的请求时,动态加载目标文件及第一模块中的数据,以供第二模块调用。本发明还涉及区块链技术,第一文件可存储于区块链中。本发明可以自动生成硬编码实现模块之间的解耦。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种应用程序模块间的解耦方法、电子装置及存储介质。
背景技术
随着App功能不断增多,模块与模块之间的功能会相互依赖,严重影响开发效率和质量,解决模块之间的依赖通常是采用路由管理或者根据协议注册的方案,这两个方案共同缺点是:必须先完成路由或者协议注册,才可以提供服务,导致浪费不必要的内存,而基于反射动态调用的方式,可以主动发现服务,免去了注册过程和不必要的依赖,但直接使用反射动态调用,存在如下问题:存在大量的硬编码需要人工编写,容易出现编写错误,而且只能在运行时触发相关方法后才能发现错误的编写。
发明内容
鉴于以上内容,本发明提供一种应用程序模块间的解耦方法、电子装置及存储介质,其目的在于解决现有技术中应用程序的模块解耦时需要人工编写大量硬编码需的技术问题。
为实现上述目的,本发明提供一种应用程序模块间的解耦方法,该方法包括:
存储步骤:将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件;
解析步骤:基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型;
生成步骤:基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件;及
调用步骤:当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用。
优选的,所述基于第一预设正则表达式集解析所述第一文件包括:
利用第一预设正则表达式集查找并获取所述第一文件中包含参数的接口,并对所述包含参数的接口执行解析,得到所述包含参数的接口的方法返回值、方法名称、方法参数名称及方法参数类型;
利用所述第一正则表达式集查找并获取所述第一文件中不包含参数的接口,并对所述不包含参数的接口执行解析,得到所述不包含参数的接口的方法返回值及方法名称。
优选的,所述基于第二预设正则表达式集解析所述第二文件包括:
利用所述第二正则表达式集查找并获取所述第二文件中所有实体定义,并对所述实体定义进行解析,解析出所述实体定义的属性名称、实体定义的属性参数类型。
优选的,所述调用步骤还包括:
当侦测到所述第二模块发出获取所述硬编码的请求时,通过正则查找替换将所述硬编码填充至所述第二模块对应的文件中。
优选的,所述方法还包括:
在所述第一模块中创建第一预设类型的类,将所述第一模块中第二预设类型的类抽象为所述第一预设类型的类对应的方法。
为实现上述目的,本发明还提供一种电子装置,该电子装置包括:存储器及处理器,所述存储器上存储应用程序模块间的解耦程序,所述应用程序模块间的解耦程序被所述处理器执行,实现如下步骤:
存储步骤:将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件;
解析步骤:基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型;
生成步骤:基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件;及
调用步骤:当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用。
优选的,所述基于第一预设正则表达式集解析所述第一文件包括:
利用第一预设正则表达式集查找并获取所述第一文件中包含参数的接口,并对所述包含参数的接口执行解析,得到所述包含参数的接口的方法返回值、方法名称、方法参数名称及方法参数类型;
利用所述第一正则表达式集查找并获取所述第一文件中不包含参数的接口,并对所述不包含参数的接口执行解析,得到所述不包含参数的接口的方法返回值及方法名称。
优选的,所述基于第二预设正则表达式集解析所述第二文件包括:
利用所述第二正则表达式集查找并获取所述第二文件中所有实体定义,并对所述实体定义进行解析,解析出所述实体定义的属性名称、实体定义的属性参数类型。
优选的,所述调用步骤还包括:
当侦测到所述第二模块发出获取所述硬编码的请求时,通过正则查找替换将所述硬编码填充至所述第二模块对应的文件中。
为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括应用程序模块间的解耦程序,所述应用程序模块间的解耦程序被处理器执行时,实现如上所述应用程序模块间的解耦方法中的任意步骤。
本发明提出的应用程序模块间的解耦方法、电子装置及存储介质,通过生成模块调用时所有需要硬编码,只需要在开发业务模块(第二模块)时完成其核心业务的开发,将自动生成的硬编码对业务模块公开使用即可,实现了模块之间的解耦,极大提高了开发效率。
附图说明
图1为本发明电子装置较佳实施例的示意图;
图2为图1中应用程序模块间的解耦程序较佳实施例的模块示意图;
图3为本发明应用程序模块间的解耦方法较佳实施例的流程图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1所示,为本发明电子装置1较佳实施例的示意图。
该电子装置1包括但不限于:存储器11、处理器12、显示器13及网络接口14。所述电子装置1通过网络接口14连接网络,获取原始数据。其中,所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobilecommunication,GSM)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi、通话网络等无线或有线网络。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子装置1的内部存储单元,例如该电子装置1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子装置1的外部存储设备,例如该电子装置1配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述电子装置1的内部存储单元也包括其外部存储设备。本实施例中,存储器11通常用于存储安装于所述电子装置1的操作系统和各类应用软件,例如应用程序模块间的解耦程序10的程序代码等。此外,存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子装置1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行应用程序模块间的解耦程序10的程序代码等。
显示器13可以称为显示屏或显示单元。在一些实施例中显示器13可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-EmittingDiode,OLED)触摸器等。显示器13用于显示在电子装置1中处理的信息以及用于显示可视化的工作界面,例如显示数据统计的结果。
网络接口14可选地可以包括标准的有线接口、无线接口(如WI-FI接口),该网络接口14通常用于在所述电子装置1与其它电子设备之间建立通信连接。
图1仅示出了具有组件11-14以及应用程序模块间的解耦程序10的电子装置1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
可选地,所述电子装置1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子装置1中处理的信息以及用于显示可视化的用户界面。
该电子装置1还可以包括射频(Radio Frequency,RF)电路、传感器和音频电路等等,在此不再赘述。
在上述实施例中,处理器12执行存储器11中存储的应用程序模块间的解耦程序10时可以实现如下步骤:
存储步骤:将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件;
解析步骤:基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型;
生成步骤:基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件;及
调用步骤:当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用。
所述存储设备可以为电子装置1的存储器11,也可以为与电子装置1通讯连接的其它存储设备。
关于上述步骤的详细介绍,请参照下述图2关于应用程序模块间的解耦程序10实施例的程序模块图以及图3关于应用程序模块间的解耦方法实施例的流程图的说明。
在其他实施例中,所述应用程序模块间的解耦程序10可以被分割为多个模块,该多个模块被存储于存储器11中,并由处理器12执行,以完成本发明。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。
参照图2所示,为图1中应用程序模块间的解耦程序10一实施例的程序模块图。在本实施例中,所述应用程序模块间的解耦程序10可以被分割为:存储模块110、解析模块120、生成模块130及调用模块140。
存储模块110,用于将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件。
在本实施例中,应用程序是由多个模块组成的,一般按照不同的业务功能拆分成不同的业务模块构成,本实施例中的第一模块可以是共享模块,例如,电商应用程序中展示商品列表的商品模块,在实际应用场景中,店铺模块需要依赖商品模块进行商品展示,订单模块会在用户下订单过程中会依赖商品模块的商品价格等,当多个模块都依赖某一个共享模块时,动态调用的代码就会重复多次,若需要修改调用代码,则需要修改多个地方,因此可以将共享模块中不同类型的功能数据封装为对应的接口,统一对外提供服务,当需要修改调用代码时,只需要修改这个接口对应的代码,而不用多处修改,将封装后的接口存储至预设的第一文件,将第一模块的实体对象存储至预设的第二文件,实体对象可以是商品模块中的商品对象(包含多个字段的属性对象,比如商品名称、价格等等)。
解析模块120,用于基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型。
在本实施例中,根据第一预设正则表达式集解析第一文件,第二预设正则表达式集解析第二文件,分别得到第一文件及第二文件的函数名、参数名、参数类型、实体属性名及实体属性类型。
进一步的,基于第一预设正则表达式集解析所述第一文件包括:
利用第一预设正则表达式集查找并获取所述第一文件中包含参数的接口,并对所述包含参数的接口执行解析,得到所述包含参数的接口的方法返回值、方法名称、方法参数名称及方法参数类型;
利用所述第一正则表达式集查找并获取所述第一文件中不包含参数的接口,并对所述不包含参数的接口执行解析,得到所述不包含参数的接口的方法返回值及方法名称。
其中,找到所有含有参数的接口正则表达式包括:
"[\\+|-]\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\)(\\s*[a-zA-Z_0-9]+:\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\)\\s*[a-zA-Z_0-9]+)+\\s*;"
找到参数类型正则表达式包括:
"NS[a-zA-Z<>\\*\\s,_]+\\*"
找到函数中参数名称和类型正则表达式包括:
"\\s*([a-zA-Z_0-9]+):(\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\))\\s*([a-zA-Z_0-9]+)"
找到函数返回部分正则表达式包括:
"[\\+|-]\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\)"
找到函数返回类型正则表达式包括:
"[\\+|-]\\s*\\(\\s*([a-zA-Z<>\\s\\*_,]+\\s*\\*?)\\s*\\)"
找到不包含参数的正则表达式包括:
"[\\+|-]\\s*\\(\\s*([a-zA-Z<>\\s\\*_,]+\\s*\\*?)\\s*\\)\\s*[a-zA-Z_0-9]+\\s*;"
找到没有参数的函数名称正则表达式包括:
"[\\+|-]\\s*\\(\\s*([a-zA-Z<>\\s\\*_,]+\\s*\\*?)\\s*\\)\\s*([a-zA-Z_0-9]+)\\s*;"
进一步地,基于第二预设正则表达式集解析所述第二文件包括:
利用所述第二正则表达式集查找并获取所述第二文件中所有实体定义,并对所述实体定义进行解析,解析出所述实体定义的属性名称、实体定义的属性参数类型。
其中,找到所有实体定义的正则表达式包括:
"@interface\\s*([a-zA-Z_0-9]+)\\s*:[a-zA-Z_0-9\\s]+(@property[a-zA-Z_,0-9\\s\\*\\(\\)]+;\\s*)+@end"
找到实体中单个属性信息,包括属性的类型、名称的正则表达式包括:
"@property\\s*\\([a-zA-Z,0-9_\\s]+\\)\\s*([a-zA-Z0-9_]+\\s*\\*?)\\s*([a-zA-Z0-9_]+)\\s*;"。
生成模块130,用于基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件。
在本实施例中,基于解析得到的函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成hardcode代码。其中,参数类型和实体属性类型不变。
具体地,函数名约定Action_开头,例如:
-(NSDictionry*)Action_getGoodById:(NSString*)id
参数名的key值定义为:k+模块名+Param+参数,例如:
NSString*const kGoodsParamGoodId=@"goodid";
NSString*const kGoodsParamDidlaunchOptions=@"didlaunchoptions";
NSString*const kSaleParamSex=@"sex";
将实体属性名转换为字典,字典的key定义为:k+模块名+实体名+参数。
例如:
#pragma mark-GoodsModel Entiry Dic key;
NSString*const kSaleGoodsModelGoodsId=@"goodsid";
NSString*const kSaleGoodsModelName=@"name";
将生成的硬编码分别填充至预设的模板文件以生成目标文件,预设的模板文件可以包括:Target接口声明文件、Target接口实现文件、Category接口声明文件、Category接口实现文件。硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同。
调用模块140,用于当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用。
在本实施例中,当侦测到第二模块需要调用第一模块的数据时,利用Run Time动态加载目标文件及第一模块中相关的数据,以供第二模块调用。
第二模块可以是电商应用程序中的店铺模块,如果第一模块(商品模块)中存在一个类(例如,类名为YZGoodManager),当店铺模块需要调用这个类时,可以利用Run Time从一个字符串动态加载得到一个类对象,店铺模块就不需要依赖这个类,而是依赖一个字符串。还可以将Run Time动态加载类和方法的这个相同的步骤抽取出来,把不同的部分定义为变量参数动态接受输入,即同时对外提供一个动态接收类和方法的接口,实现了模块间的解耦。
进一步地,当侦测到所述第二模块发出获取所述硬编码的请求时,通过正则查找替换将所述硬编码填充至所述第二模块对应的文件中。
当某个第二模块需要获取硬编码时,可以将生成硬编码通过正则查找替换并填充至该第二模块对应的文件中,实际业务开发中,可以通过把生成的硬编码动态插入到新建立的第二模块中,使第二模块快速具有新的功能。
进一步地,在所述第一模块中创建第一预设类型的类,将所述第一模块中第二预设类型的类抽象为所述第一预设类型的类对应的方法。
在第一模块中新建一个类(例如,Goods Target),将第一模块中其他的类抽象为新建的类的方法(即Action)。所以Goods Target类封装了第一模块供外部模块调用的所有服务。在应用程序的其它模块调用第一模块时不会直接依赖第一模块内的具体多个类对应的字符串,只是依赖第一模块的新建的类。
此外,本发明还提供一种应用程序模块间的解耦方法。参照图3所示,为本发明应用程序模块间的解耦方法的实施例的方法流程示意图。电子装置1的处理器12执行存储器11中存储的应用程序模块间的解耦程序10时实现应用程序模块间的解耦方法的如下步骤:
步骤S10:将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件。
在本实施例中,应用程序是由多个模块组成的,一般按照不同的业务功能拆分成不同的业务模块构成,本实施例中的第一模块可以是共享模块,例如,电商应用程序中展示商品列表的商品模块,在实际应用场景中,店铺模块需要依赖商品模块进行商品展示,订单模块会在用户下订单过程中会依赖商品模块的商品价格等,当多个模块都依赖某一个共享模块时,动态调用的代码就会重复多次,若需要修改调用代码,则需要修改多个地方,因此可以将共享模块中不同类型的功能数据封装为对应的接口,统一对外提供服务,当需要修改调用代码时,只需要修改这个接口对应的代码,而不用多处修改,将封装后的接口存储至预设的第一文件,将第一模块的实体对象存储至预设的第二文件,实体对象可以是商品模块中的商品对象(包含多个字段的属性对象,比如商品名称、价格等等)。
步骤S20:基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型。
在本实施例中,根据第一预设正则表达式集解析第一文件,第二预设正则表达式集解析第二文件,分别得到第一文件及第二文件的函数名、参数名、参数类型、实体属性名及实体属性类型。
进一步的,基于第一预设正则表达式集解析所述第一文件包括:
利用第一预设正则表达式集查找并获取所述第一文件中包含参数的接口,并对所述包含参数的接口执行解析,得到所述包含参数的接口的方法返回值、方法名称、方法参数名称及方法参数类型;
利用所述第一正则表达式集查找并获取所述第一文件中不包含参数的接口,并对所述不包含参数的接口执行解析,得到所述不包含参数的接口的方法返回值及方法名称。
其中,找到所有含有参数的接口正则表达式包括:
"[\\+|-]\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\)(\\s*[a-zA-Z_0-9]+:\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\)\\s*[a-zA-Z_0-9]+)+\\s*;"
找到参数类型正则表达式包括:
"NS[a-zA-Z<>\\*\\s,_]+\\*"
找到函数中参数名称和类型正则表达式包括:
"\\s*([a-zA-Z_0-9]+):(\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\))\\s*([a-zA-Z_0-9]+)"
找到函数返回部分正则表达式包括:
"[\\+|-]\\s*\\(\\s*[a-zA-Z<>\\s\\*_,]+\\s*\\*?\\s*\\)"
找到函数返回类型正则表达式包括:
"[\\+|-]\\s*\\(\\s*([a-zA-Z<>\\s\\*_,]+\\s*\\*?)\\s*\\)"
找到不包含参数的正则表达式包括:
"[\\+|-]\\s*\\(\\s*([a-zA-Z<>\\s\\*_,]+\\s*\\*?)\\s*\\)\\s*[a-zA-Z_0-9]+\\s*;"
找到没有参数的函数名称正则表达式包括:
"[\\+|-]\\s*\\(\\s*([a-zA-Z<>\\s\\*_,]+\\s*\\*?)\\s*\\)\\s*([a-zA-Z_0-9]+)\\s*;"
进一步地,基于第二预设正则表达式集解析所述第二文件包括:
利用所述第二正则表达式集查找并获取所述第二文件中所有实体定义,并对所述实体定义进行解析,解析出所述实体定义的属性名称、实体定义的属性参数类型。
其中,找到所有实体定义的正则表达式包括:
"@interface\\s*([a-zA-Z_0-9]+)\\s*:[a-zA-Z_0-9\\s]+(@property[a-zA-Z_,0-9\\s\\*\\(\\)]+;\\s*)+@end"
找到实体中单个属性信息,包括属性的类型、名称的正则表达式包括:
"@property\\s*\\([a-zA-Z,0-9_\\s]+\\)\\s*([a-zA-Z0-9_]+\\s*\\*?)\\s*([a-zA-Z0-9_]+)\\s*;"。
步骤S30:基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件。
在本实施例中,基于解析得到的函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成hardcode代码。其中,参数类型和实体属性类型不变。
具体地,函数名约定Action_开头,例如:
-(NSDictionry*)Action_getGoodById:(NSString*)id
参数名的key值定义为:k+模块名+Param+参数,例如:
NSString*const kGoodsParamGoodId=@"goodid";
NSString*const kGoodsParamDidlaunchOptions=@"didlaunchoptions";
NSString*const kSaleParamSex=@"sex";
将实体属性名转换为字典,字典的key定义为:k+模块名+实体名+参数。
例如:
#pragma mark-GoodsModel Entiry Dic key;
NSString*const kSaleGoodsModelGoodsId=@"goodsid";
NSString*const kSaleGoodsModelName=@"name";
将生成的硬编码分别填充至预设的模板文件以生成目标文件,预设的模板文件可以包括:Target接口声明文件、Target接口实现文件、Category接口声明文件、Category接口实现文件。硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同。
步骤S40:当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用。
在本实施例中,当侦测到第二模块需要调用第一模块的数据时,利用Run Time动态加载目标文件及第一模块中相关的数据,以供第二模块调用。
第二模块可以是电商应用程序中的店铺模块,如果第一模块(商品模块)中存在一个类(例如,类名为YZGoodManager),当店铺模块需要调用这个类时,可以利用Run Time从一个字符串动态加载得到一个类对象,店铺模块就不需要依赖这个类,而是依赖一个字符串。还可以将Run Time动态加载类和方法的这个相同的步骤抽取出来,把不同的部分定义为变量参数动态接受输入,即同时对外提供一个动态接收类和方法的接口,实现了模块间的解耦。
进一步地,当侦测到所述第二模块发出获取所述硬编码的请求时,通过正则查找替换将所述硬编码填充至所述第二模块对应的文件中。
当某个第二模块需要获取硬编码时,可以将生成硬编码通过正则查找替换并填充至该第二模块对应的文件中,实际业务开发中,可以通过把生成的硬编码动态插入到新建立的第二模块中,使第二模块快速具有新的功能。
进一步地,在所述第一模块中创建第一预设类型的类,将所述第一模块中第二预设类型的类抽象为所述第一预设类型的类对应的方法。
在第一模块中新建一个类(例如,Goods Target),将第一模块中其他的类抽象为新建的类的方法(即Action)。所以Goods Target类封装了第一模块供外部模块调用的所有服务。在应用程序的其它模块调用第一模块时不会直接依赖第一模块内的具体多个类对应的字符串,只是依赖第一模块的新建的类。
此外,本发明实施例还提出一种计算机可读存储介质,该计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括应用程序模块间的解耦程序10,所述应用程序模块间的解耦程序10被处理器执行时实现如下操作:
存储步骤:将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件;
解析步骤:基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型;
生成步骤:基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件;及
调用步骤:当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用。
在另一个实施例中,本发明所提供的应用程序模块间的解耦方法,为进一步保证上述所有出现的数据的私密和安全性,上述所有数据还可以存储于一区块链的节点中。例如预设的第一文件、预设的第二文件或第一预设正则表达式集等等,这些数据均可存储在区块链节点中。
需要说明的是,本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
本发明之计算机可读存储介质的具体实施方式与上述应用程序模块间的解耦方法的具体实施方式大致相同,在此不再赘述。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,电子装置,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (7)
1.一种应用程序模块间的解耦方法,应用于电子装置,其特征在于,所述应用程序包括第一模块及第二模块,第一模块是共享模块,所述方法包括:
存储步骤:将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件;
解析步骤:基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型;
生成步骤:基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件,其中,参数类型和实体属性类型不变,预设的模板文件包括:Target接口声明文件、Target接口实现文件、Category接口声明文件、Category接口实现文件;及
调用步骤:当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用;
其中,所述调用步骤还包括:当侦测到所述第二模块发出获取所述硬编码的请求时,通过正则查找替换将所述硬编码填充至所述第二模块对应的文件中;
所述方法还包括:在所述第一模块中创建第一预设类型的类,将所述第一模块中第二预设类型的类抽象为所述第一预设类型的类对应的方法。
2.如权利要求1所述的应用程序模块间的解耦方法,其特征在于,所述基于第一预设正则表达式集解析所述第一文件包括:
利用第一预设正则表达式集查找并获取所述第一文件中包含参数的接口,并对所述包含参数的接口执行解析,得到所述包含参数的接口的方法返回值、方法名称、方法参数名称及方法参数类型;
利用所述第一预设正则表达式集查找并获取所述第一文件中不包含参数的接口,并对所述不包含参数的接口执行解析,得到所述不包含参数的接口的方法返回值及方法名称。
3.如权利要求1所述的应用程序模块间的解耦方法,其特征在于,所述基于第二预设正则表达式集解析所述第二文件包括:
利用所述第二预设正则表达式集查找并获取所述第二文件中所有实体定义,并对所述实体定义进行解析,解析出所述实体定义的属性名称、实体定义的属性参数类型。
4.一种电子装置,该电子装置包括存储器及处理器,其特征在于,所述存储器上存储应用程序模块间的解耦程序,所述应用程序模块间的解耦程序被所述处理器执行,实现如下步骤:
存储步骤:将第一模块中不同类型的功能数据封装为对应的接口,将封装后的接口存储至预设的第一文件,将所述第一模块的实体对象存储至预设的第二文件,第一模块是共享模块;
解析步骤:基于第一预设正则表达式集解析所述第一文件,得到所述第一文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型,基于第二预设正则表达式集解析所述第二文件,得到所述第二文件对应的函数名、参数名、参数类型、实体属性名及实体属性类型;
生成步骤:基于所述函数名、参数名、参数类型、实体属性名及实体属性类型,及预设的生成规则生成硬编码,将生成的硬编码分别填充至预设的模板文件中生成目标文件,其中,参数类型和实体属性类型不变,预设的模板文件包括:Target接口声明文件、Target接口实现文件、Category接口声明文件、Category接口实现文件;及
调用步骤:当侦测到第二模块发出调用第一模块的请求时,动态加载所述目标文件及第一模块中的数据,以供所述第二模块调用;
其中,所述调用步骤还包括:当侦测到所述第二模块发出获取所述硬编码的请求时,通过正则查找替换将所述硬编码填充至所述第二模块对应的文件中;
所述应用程序模块间的解耦程序被所述处理器执行,还实现如下步骤:在所述第一模块中创建第一预设类型的类,将所述第一模块中第二预设类型的类抽象为所述第一预设类型的类对应的方法。
5.如权利要求4所述的电子装置,其特征在于,所述基于第一预设正则表达式集解析所述第一文件包括:
利用第一预设正则表达式集查找并获取所述第一文件中包含参数的接口,并对所述包含参数的接口执行解析,得到所述包含参数的接口的方法返回值、方法名称、方法参数名称及方法参数类型;
利用所述第一预设正则表达式集查找并获取所述第一文件中不包含参数的接口,并对所述不包含参数的接口执行解析,得到所述不包含参数的接口的方法返回值及方法名称。
6.如权利要求4所述的电子装置,其特征在于,所述基于第二预设正则表达式集解析所述第二文件包括:
利用所述第二预设正则表达式集查找并获取所述第二文件中所有实体定义,并对所述实体定义进行解析,解析出所述实体定义的属性名称、实体定义的属性参数类型。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括应用程序模块间的解耦程序,所述应用程序模块间的解耦程序被处理器执行时,实现如权利要求1至3中任一项所述应用程序模块间的解耦方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010477735.9A CN111694613B (zh) | 2020-05-29 | 2020-05-29 | 应用程序模块间的解耦方法、电子装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010477735.9A CN111694613B (zh) | 2020-05-29 | 2020-05-29 | 应用程序模块间的解耦方法、电子装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111694613A CN111694613A (zh) | 2020-09-22 |
CN111694613B true CN111694613B (zh) | 2023-07-25 |
Family
ID=72478954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010477735.9A Active CN111694613B (zh) | 2020-05-29 | 2020-05-29 | 应用程序模块间的解耦方法、电子装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111694613B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112782560A (zh) * | 2020-12-31 | 2021-05-11 | 海光信息技术股份有限公司 | 芯片测试方法、装置、存储介质及设备 |
CN113506569B (zh) * | 2021-06-07 | 2023-02-03 | 上海七十迈数字科技有限公司 | 一种语音交互的方法、系统及设备 |
CN113538089A (zh) * | 2021-06-30 | 2021-10-22 | 北京思特奇信息技术股份有限公司 | 一种基于crm系统新增订单的校正方法及系统、电子设备、存储介质 |
CN113703781B (zh) * | 2021-07-16 | 2023-07-21 | 苏州浪潮智能科技有限公司 | 存储系统接口生成方法、装置、电子设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5257369A (en) * | 1990-10-22 | 1993-10-26 | Skeen Marion D | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes |
EP1703387A1 (en) * | 2005-03-14 | 2006-09-20 | Research In Motion Limited | System and method for generating component based applications |
CN103577380A (zh) * | 2013-10-24 | 2014-02-12 | 深圳市远行科技有限公司 | 一种动态路由服务的自动生成方法 |
CN110989891A (zh) * | 2019-12-23 | 2020-04-10 | 深圳市金蝶天燕云计算股份有限公司 | 一种图表编辑器中组件部署方法、图表编辑器及相关设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140366045A1 (en) * | 2013-06-07 | 2014-12-11 | Microsoft Corporation | Dynamic management of composable api sets |
US10338908B2 (en) * | 2017-01-11 | 2019-07-02 | Sap Se | Modularized application framework |
-
2020
- 2020-05-29 CN CN202010477735.9A patent/CN111694613B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5257369A (en) * | 1990-10-22 | 1993-10-26 | Skeen Marion D | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes |
EP1703387A1 (en) * | 2005-03-14 | 2006-09-20 | Research In Motion Limited | System and method for generating component based applications |
CN103577380A (zh) * | 2013-10-24 | 2014-02-12 | 深圳市远行科技有限公司 | 一种动态路由服务的自动生成方法 |
CN110989891A (zh) * | 2019-12-23 | 2020-04-10 | 深圳市金蝶天燕云计算股份有限公司 | 一种图表编辑器中组件部署方法、图表编辑器及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111694613A (zh) | 2020-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111694613B (zh) | 应用程序模块间的解耦方法、电子装置及存储介质 | |
CN109062925B (zh) | 自动生成insert语句的方法、装置、计算机设备及存储介质 | |
US7523461B2 (en) | Modification of logic in an application | |
US8818967B2 (en) | Method for compressing identifiers | |
CN111651468A (zh) | 基于sql解析的数据更新方法、装置、电子设备及存储介质 | |
US8949821B2 (en) | Cap file for the personalization of a java application | |
CN112769706B (zh) | 组件化路由方法及系统 | |
CN106569880A (zh) | 一种Android应用间动态共享资源的方法及系统 | |
CN112416458A (zh) | 基于ReactNative的预加载方法、装置、计算机设备及存储介质 | |
CN115185550A (zh) | 服务部署方法、装置、计算机设备及存储介质 | |
CN114218315A (zh) | 接口生成方法、装置、计算机设备及存储介质 | |
WO2021151347A1 (zh) | 基于iOS应用的加固方法、装置、设备及存储介质 | |
CN113703862A (zh) | 基于配置的接口调用方法、装置、设备及存储介质 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN113434582B (zh) | 业务数据处理方法、装置、计算机设备和存储介质 | |
CN111782239B (zh) | 软件打包和源码版本信息获取方法、装置及存储介质 | |
US7698703B2 (en) | Imparting digital uniqueness to the types of a programming language using a unique digital sequence | |
CN113987337A (zh) | 基于组件化动态编排的搜索方法、系统、设备及存储介质 | |
CN113296752A (zh) | 生成api文档的方法、系统、设备及存储介质 | |
CN111857881A (zh) | 基于repo的manifest仓库加载方法、装置及存储介质 | |
CN111324645B (zh) | 区块链的数据处理方法及装置 | |
CN111158777A (zh) | 组件调用方法、装置及计算机可读存储介质 | |
CN113282541B (zh) | 文件调用方法、装置和电子设备 | |
CN113687827B (zh) | 基于微件的数据列表生成方法、装置、设备及存储介质 | |
CN117009397A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |