CN106293680A - 一种组件管理方法及装置 - Google Patents
一种组件管理方法及装置 Download PDFInfo
- Publication number
- CN106293680A CN106293680A CN201510317830.1A CN201510317830A CN106293680A CN 106293680 A CN106293680 A CN 106293680A CN 201510317830 A CN201510317830 A CN 201510317830A CN 106293680 A CN106293680 A CN 106293680A
- Authority
- CN
- China
- Prior art keywords
- assembly
- interface
- component
- module
- management
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供了一种组件管理方法及装置,以提高组件封装性;该方法包括:定义所有组件的基础组件接口;利用基础组件接口管理组件。通过本发明的实施,提供统一的基础组件接口,统一对组件内不同类型组件元素的注册/调用等进行管理,跨组件使用在目标接口中定义了的成员函数时,无需关注该函数所在组件是否加载,即可保证对装置代码的正常维护,组件内部函数实现修改在组件内部完成,在输入输出参数无变化时对组件对外接口的定义无影响,对组件间函数调用也无影响,这样就保证了单个组件内部变更的封装性。
Description
技术领域
本发明涉及代码模块管理领域,尤其涉及一种组件管理方法及装置。
背景技术
当前通讯领域面对项目多、软件功能模块多的现状,如何在最大化实现代码共享的同时保证模块自身的封装性、可复用性及对外独立交付需求是降低项目管理成本和提高代码质量所需解决的问题。
现有技术采用的方法包括:1)定义顶层初始化登记表、模块登记表和模块族登记表的全局变量数组;2)遍历顶层初始化登记表,完成顶层初始化;3)完成调度初始化:根据模块族登记表完成模块公共消息处理任务初始化,根据模块登记表完成模块自处理任务初始化;4)由模块公共处理任务和模块自处理任务完成消息管理。该方法因为组件内部实现对外提供全局变量数据太多,降低了组件的封装性。
因此,如何提供一种可提高组件封装性的组件管理方法,是本领域技术人员亟待解决的技术问题。
发明内容
本发明提供了一种组件管理方法及装置,以提高组件封装性。
本发明提供了一种组件管理方法,其包括:定义所有组件的基础组件接口;利用基础组件接口管理组件。
进一步的,利用基础组件接口管理组件包括:建立组件树,控制组件利用基础组件接口注册到组件树。
进一步的,组件包括LIB组件及Module组件,基础组件接口包括组件注册接口CO_Create及组件加载接口CO_LoadModules;控制组件注册到组件树包括:控制LIB组件利用CO_Create注册之后,利用CO_LoadModules完成该LIB级组件下module级组件表中所有module组件的注册,和/或,控制Module组件利用CO_Create注册。
进一步的,基础组件接口包括用于完成组件对外服务接口调用的调用接口CO_CALL;利用基础组件接口管理组件包括还包括:通过调用接口CO_CALL,根据组件标识在组件树内获取组件节点,获取组件节点对应实例数据中的成员接口,根据接口标识查找接口实例,调用接口实例中函数标识对应的函数。
进一步的,还包括:利用符号检查工具根据编译规则对组件编译进行符号隐藏和生成库属性划分。
本发明提供了一种组件管理装置,其包括:设置模块,用于定义所有组件的基础组件接口;管理模块,用于利用基础组件接口管理组件。
进一步的,管理模块用于建立组件树,控制组件利用基础组件接口注册到组件树。
进一步的,组件包括LIB组件及Module组件,基础组件接口包括组件注册接口CO_Create及组件加载接口CO_LoadModules;管理模块具体用于控制LIB组件利用CO_Create注册之后,利用CO_LoadModules完成该LIB级组件下module级组件表中所有module组件的注册,和/或,控制Module组件利用CO_Create注册。
进一步的,基础组件接口包括用于完成组件对外服务接口调用的调用接口CO_CALL;管理模块还用于通过调用接口CO_CALL,根据组件标识在组件树内获取组件节点,获取组件节点对应实例数据中的成员接口,根据接口标识查找接口实例,调用接口实例中函数标识对应的函数。
进一步的,还包括保护模块,用于利用符号检查工具根据编译规则对组件编译进行符号隐藏和生成库属性划分。
本发明的有益效果:
本发明提供了一种组件管理方法,提供统一的基础组件接口,统一对组件内不同类型组件元素的注册/调用等进行管理,跨组件使用在目标接口中定义了的成员函数时,无需关注该函数所在组件是否加载,即可保证对装置代码的正常维护,组件内部函数实现修改在组件内部完成,在输入输出参数无变化时对组件对外接口的定义无影响,对组件间函数调用也无影响,这样就保证了单个组件内部变更的封装性。
附图说明
图1为本发明第一实施例提供的组件管理装置的结构示意图;
图2为本发明第二实施例提供的组件管理方法的流程图;
图3为本发明第三实施例提供的组件管理方法的流程图。
具体实施方式
现通过具体实施方式结合附图的方式对本发明做出进一步的诠释说明。
第一实施例:
图1为本发明第一实施例提供的组件管理装置的结构示意图,由图1可知,在本实施例中,本发明提供的组件管理装置1包括:
设置模块11,用于定义所有组件的基础组件接口;
管理模块12,用于利用基础组件接口管理组件。
在一些实施例中,上述实施例中的管理模块12用于建立组件树,控制组件利用基础组件接口注册到组件树。
在一些实施例中,上述实施例中的组件包括LIB组件及Module组件,基础组件接口包括组件注册接口CO_Create及组件加载接口CO_LoadModules;管理模块12具体用于控制LIB组件利用CO_Create注册之后,利用CO_LoadModules完成该LIB级组件下module级组件表中所有module组件的注册,和/或,控制Module组件利用CO_Create注册。
在一些实施例中,上述实施例中的基础组件接口包括用于完成组件对外服务接口调用的调用接口CO_CALL;管理模块12还用于通过调用接口CO_CALL,根据组件标识在组件树内获取组件节点,获取组件节点对应实例数据中的成员接口,根据接口标识查找接口实例,调用接口实例中函数标识对应的函数。
在一些实施例中,如图1所示,上述实施例中的组件管理装置1还包括保护模块13,用于利用符号检查工具根据编译规则对组件编译进行符号隐藏和生成库属性划分。
第二实施例:
图2为本发明第二实施例提供的组件管理方法的流程图,由图2可知,在本实施例中,本发明提供的组件管理方法包括以下步骤:
S201:定义所有组件的基础组件接口;
S202:利用基础组件接口管理组件。
在一些实施例中,上述实施例中的利用基础组件接口管理组件包括:建立组件树,控制组件利用基础组件接口注册到组件树。
在一些实施例中,上述实施例中的组件包括LIB组件及Module组件,基础组件接口包括组件注册接口CO_Create及组件加载接口CO_LoadModules;控制组件注册到组件树包括:控制LIB组件利用CO_Create注册之后,利用CO_LoadModules完成该LIB级组件下module级组件表中所有module组件的注册,和/或,控制Module组件利用CO_Create注册。
在一些实施例中,上述实施例中的基础组件接口包括用于完成组件对外服务接口调用的调用接口CO_CALL;利用基础组件接口管理组件包括还包括:通过调用接口CO_CALL,根据组件标识在组件树内获取组件节点,获取组件节点对应实例数据中的成员接口,根据接口标识查找接口实例,调用接口实例中函数标识对应的函数。
在一些实施例中,上述实施例中的组件管理方法还包括:利用符号检查工具根据编译规则对组件编译进行符号隐藏和生成库属性划分。
现结合具体应用场景对本发明做进一步的诠释说明。
第三实施例:
图3为本发明第三实施例提供的组件管理方法的流程图,由图3可知,在本实施例中,本发明提供的组件管理方法包括以下步骤:
S301:定义组件类型、基础组件接口、基础函数;
组件管理装置定义并提供一套基础组件接口,装置实现应使用组件管理装置提供的基础组件接口完成所需功能,以屏蔽组件内部实现差异
组件管理装置按照独立交付的思想将装置中组件及软件接口表达分为如下层次:软件包(LIB)、软件模块(module)、接口(interface)和函数(function)。装置约定组件包含LIB和module两种类;interface定义为组件对外发布的服务接口,每个组件内部可定义多个interface,其按照子功能类别进行划分;一个interface内部可以包含多个function,function是实现组件服务的最基层单元。组件管理装置为组件内部interface、function实现定义了统一规范,组件内部需按此统一规范进行定义,以达到在interface接口层上保证组件的独立交付的目的。
组件管理装置将组件逻辑标识定义为PROG_ID,interface逻辑标识定义为INTERFACE,function逻辑标识定义为FUNCTION。组件管理装置定义了一组表现形式为CO_CALL的调用方法来支持对服务接口的访问,CO_CALL使用PROG_ID、INTERFACE、FUNCTION来寻址组件function实际地址,寻址成功的产生实际调用行为,寻址失败的返回错误码。基于此,组件是否“编译、注册、初始化”仅影响组件间函数调用的实际效果,但不影响版本的编译、生成和运行。
组件管理装置为了从编译上对组件间函数调用方法进行限制,对组件编译进行了符号隐藏和生成库属性划分,装置下的库被分为组件动态库、共享库、静态库,版本生成过程将由编译链接规则及额外增加的符号检查工具对组件内部函数进行保护,以推动使用组件CO_CALL方式进行组件间函数调用,而约束使用extern或__attribute__((visibility("default")))属性进行函数声明和调用,因为使用extern或__attribute__((visibility("default")))属性进行函数声明和调用在如上编译约束情况时,对组件函数使用有如下约束:对于使用了隐藏规则的静态库,其中引出的函数不能在除静态库及app.bin外使用;对使用了隐藏属性的共享库,其中未引出的函数接口不能在本组件外使用;对于使用了隐藏属性的动态库中函数接口不能在本组件外使用。
组件管理装置为实现组件管理定义了一套命名以CO_为前缀基础函数,如:CO_Create、CO_LoadLibs、CO_LoadModules、CO_LoadDLL、CO_CALL、CO_MsgDispatch、CO_QueryInterface等,这组基础组件接口为组件统一管理提供支持。其中,CO_LoadLibs、CO_LoadModules、CO_LoadDLL分别用于完成LIB组件、module组件和动态库组件的加载;CO_Create用于将组件挂接到组件树上;CO_CALL用于完成组件对外服务接口调用;CO_MsgDispatch用于实现组件内消息的转发;CO_QueryInterface用于依据索引PROG_ID、INTERFACE、FUNCTION来完成对组件interface及function的查找,是其它基础函数实现的基础。
组件管理装置定义的组件内部实现规范约定包括如下几点:为组件interface指定定义格式、为组件注册函数指定定义格式、约定将组件interface汇总到组件接口集注册表中。组件管理装置提供了三个标准接口:CO_IUNKNOWN、CO_IBASIC、CO_IMSG_MA,还约定了组件服务接口定义格式:CO_IXXX,组件内部将为interface创建interface实例,所有本组件接口实例需汇总到本组件接口集注册表中,每个组件有一个libmain函数,用于完成组件的注册,组件管理装置为libmain函数约定了定义格式。
S302:组件树初始化。
组件树初始化包括组件内存申请和组件树创建,后续注册的组件将挂接在组件树结点上。装置启动时,会调用Lib初始化接口完成组件树的初始化。
S303:组件注册。
组件通过组件管理装置提供的组件注册接口CO_Create将组件挂接到组件树中,组件注册后,组件管理装置通过基础接口CO_CALL就可以完成对组件服务接口的调用了。
在实际应用中,组件注册包括组件注册module流程及组件注册接口CO_Create流程。
具体的,组件注册module流程具体包括以下步骤:
判断组件是否为LIB级组件;
若是,则调用CO_Create完成LIB组件注册,之后,调用CO_LoadModules完成该LIB级组件下module级组件表中所有module组件的注册;
若否,则调用CO_Create完成Module组件的注册。
组件注册module流程实现将组件挂靠在组件树上,在此基础上进行组件注册接口CO_Create流程;具体的,组件注册接口CO_Create流程具体包括以下步骤:
在组件树上查找组件标识PROG_ID对应的节点;
若查找到节点,则在组件树新增组件节点,并依次将组件模块CO_IUNKNOWN实例、组件版本信息、组件消息处理表信息、组件内进程表信息记入组件节点,完成组件注册接口CO_Create的流程;
若没有查找到节点,则流程结束。
S304:函数调用。
在实际应用中,调用组件实际是调用组件内的函数,在上述步骤的基础上,本发明的函数调用流程包括以下步骤:
根据组件标识PROG_ID在组件树内查找到对应的组件节点;
获取该组件节点中记录的CO_IUNKNOWN实例数据;
调用该组件CO_IUNKNOWN实例数据中QueryInterface成员函数,查找接口标识INTERFACE对应的interface实例;
在该interface实例中查找函数标识FUNCTION对应的function函数;
调用function函数。
针对任一个组件,组件管理装置还需要定义CO_IUNKNOWN、CO_IBASIC、CO_IMSG_MAP这三个标准interface的实例,组件管理装置根据实际需求按组件管理装置规范格式CO_IXXX定义组件服务interface及其实例。组件管理装置按照规范结合组件实际需求为interface实例创建function函数,并将其登记到对应interface中对应位置(不需要情况可不创建function,登记位置填写NULL)。将本组件中所有interface实例,汇总到本组件的接口注册表中,创建组件libmain函数。将非动态加载组件的libmain函数挂接到装置Lib注册表中或者Lib注册表中某Lib下的module注册表中;将动态加载的组件信息添加到动态加载Lib配置表中。在此基础上,装置就通过CO_CALL来完成对本组件内function的调用了。
综上可知,通过本发明的实施,至少存在以下有益效果:
采用本发明组件管理方法,跨组件使用在interface中定义了的成员函数时,无需关注该函数所在组件是否加载,即可保证对装置代码的正常维护,组件内部function实现修改在组件内部完成,在输入输出参数无变化时对组件对外interface的定义无影响,对组件间function调用也无影响,这样就保证了单个组件内部变更的封装性。
进一步的,在调用组件内函数时,根据组件标识、接口标识及函数标识进行查找,不涉及组件内数据安全性,这样,组件内的函数可以自行更新,提高了组件封装性。
进一步的,另外当两个不同项目拥有不同实现同一命名的库时,两者可使用统一的对外interface结合一定编译规则来选择所编译的模块,以实现同含义function在组件使用中的可复用性,以屏蔽两组件内部function实现的差异。同时使用组件框架所提供的组件动态库加载函数可支持组件的独立开发和运行加载,为新增组件动态库的独立交付提供支持。
以上仅是本发明的具体实施方式而已,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施方式所做的任意简单修改、等同变化、结合或修饰,均仍属于本发明技术方案的保护范围。
Claims (10)
1.一种组件管理方法,其特征在于,包括:
定义所有组件的基础组件接口;
利用所述基础组件接口管理所述组件。
2.如权利要求1所述的组件管理方法,其特征在于,利用所述基础组件接口管理所述组件包括:建立组件树,控制所述组件利用所述基础组件接口注册到所述组件树。
3.如权利要求2所述的组件管理方法,其特征在于,所述组件包括LIB组件及Module组件,所述基础组件接口包括组件注册接口CO_Create及组件加载接口CO_LoadModules;控制组件注册到所述组件树包括:控制LIB组件利用CO_Create注册之后,利用CO_LoadModules完成该LIB级组件下module级组件表中所有module组件的注册,和/或,控制Module组件利用CO_Create注册。
4.如权利要求2所述的组件管理方法,其特征在于,所述基础组件接口包括用于完成组件对外服务接口调用的调用接口CO_CALL;利用所述基础组件接口管理所述组件包括还包括:通过调用接口CO_CALL,根据组件标识在组件树内获取组件节点,获取所述组件节点对应实例数据中的成员接口,根据接口标识查找接口实例,调用所述接口实例中函数标识对应的函数。
5.如权利要求1至4任一项所述的组件管理方法,其特征在于,还包括:利用符号检查工具根据编译规则对组件编译进行符号隐藏和生成库属性划分。
6.一种组件管理装置,其特征在于,包括:
设置模块,用于定义所有组件的基础组件接口;
管理模块,用于利用所述基础组件接口管理所述组件。
7.如权利要求6所述的组件管理装置,其特征在于,所述管理模块用于建立组件树,控制所述组件利用所述基础组件接口注册到所述组件树。
8.如权利要求7所述的组件管理装置,其特征在于,所述组件包括LIB组件及Module组件,所述基础组件接口包括组件注册接口CO_Create及组件加载接口CO_LoadModules;所述管理模块具体用于控制LIB组件利用CO_Create注册之后,利用CO_LoadModules完成该LIB级组件下module级组件表中所有module组件的注册,和/或,控制Module组件利用CO_Create注册。
9.如权利要求7所述的组件管理装置,其特征在于,所述基础组件接口包括用于完成组件对外服务接口调用的调用接口CO_CALL;所述管理模块还用于通过调用接口CO_CALL,根据组件标识在组件树内获取组件节点,获取所述组件节点对应实例数据中的成员接口,根据接口标识查找接口实例,调用所述接口实例中函数标识对应的函数。
10.如权利要求6至9任一项所述的组件管理装置,其特征在于,还包括保护模块,用于利用符号检查工具根据编译规则对组件编译进行符号隐藏和生成库属性划分。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510317830.1A CN106293680A (zh) | 2015-06-11 | 2015-06-11 | 一种组件管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510317830.1A CN106293680A (zh) | 2015-06-11 | 2015-06-11 | 一种组件管理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106293680A true CN106293680A (zh) | 2017-01-04 |
Family
ID=57658796
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510317830.1A Pending CN106293680A (zh) | 2015-06-11 | 2015-06-11 | 一种组件管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106293680A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111443945A (zh) * | 2019-01-16 | 2020-07-24 | 北大方正集团有限公司 | 组件代码修改方法及设备 |
CN113709171A (zh) * | 2021-09-01 | 2021-11-26 | 北京沃东天骏信息技术有限公司 | 一种用于跨组件状态通信的方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858699A (zh) * | 2005-10-10 | 2006-11-08 | 华为技术有限公司 | 电子信息系统的软件子系统 |
CN101206568A (zh) * | 2007-12-07 | 2008-06-25 | 华中科技大学 | 一种基于Web的网格应用程序接口系统 |
CN101499022A (zh) * | 2008-02-01 | 2009-08-05 | 鸿富锦精密工业(深圳)有限公司 | 内存空间释放系统及方法 |
US7610563B2 (en) * | 2002-03-22 | 2009-10-27 | Fuji Xerox Co., Ltd. | System and method for controlling the display of non-uniform graphical objects |
CN102087597A (zh) * | 2011-02-14 | 2011-06-08 | 浪潮通信信息系统有限公司 | 一种基于j2ee和构件集的可视化开发平台 |
CN104424002A (zh) * | 2013-09-10 | 2015-03-18 | 中国科学院声学研究所 | 一种基于插件机制的动态加载组件方法和系统 |
-
2015
- 2015-06-11 CN CN201510317830.1A patent/CN106293680A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7610563B2 (en) * | 2002-03-22 | 2009-10-27 | Fuji Xerox Co., Ltd. | System and method for controlling the display of non-uniform graphical objects |
CN1858699A (zh) * | 2005-10-10 | 2006-11-08 | 华为技术有限公司 | 电子信息系统的软件子系统 |
CN101206568A (zh) * | 2007-12-07 | 2008-06-25 | 华中科技大学 | 一种基于Web的网格应用程序接口系统 |
CN101499022A (zh) * | 2008-02-01 | 2009-08-05 | 鸿富锦精密工业(深圳)有限公司 | 内存空间释放系统及方法 |
CN102087597A (zh) * | 2011-02-14 | 2011-06-08 | 浪潮通信信息系统有限公司 | 一种基于j2ee和构件集的可视化开发平台 |
CN104424002A (zh) * | 2013-09-10 | 2015-03-18 | 中国科学院声学研究所 | 一种基于插件机制的动态加载组件方法和系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111443945A (zh) * | 2019-01-16 | 2020-07-24 | 北大方正集团有限公司 | 组件代码修改方法及设备 |
CN111443945B (zh) * | 2019-01-16 | 2021-08-27 | 北大方正集团有限公司 | 组件代码修改方法及设备 |
CN113709171A (zh) * | 2021-09-01 | 2021-11-26 | 北京沃东天骏信息技术有限公司 | 一种用于跨组件状态通信的方法和装置 |
CN113709171B (zh) * | 2021-09-01 | 2023-05-30 | 北京沃东天骏信息技术有限公司 | 一种用于跨组件状态通信的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110389829B (zh) | 多租户环境中扩展对象的分类与分发 | |
CN109299587A (zh) | 基于go语言的算法保护方法、装置、设备及存储介质 | |
CN102292736A (zh) | 利用合成容器的协作环境项目可扩展性 | |
KR20220091367A (ko) | 하드웨어 및 소프트웨어를 보호하기 위한 장치, 시스템 및 방법 | |
CN112560114B (zh) | 调用智能合约的方法及装置 | |
US11893367B2 (en) | Source code conversion from application program interface to policy document | |
EP2328301A1 (en) | Method and apparatus for managing the authority in workflow component based on authority component | |
CN108134812A (zh) | 数据处理方法和装置 | |
CN103858097A (zh) | 封装其它凭据提供者的凭据提供者 | |
Arellanes et al. | D-XMAN: a platform for total compositionality in service-oriented architectures | |
US7739660B2 (en) | Code management in a distributed software development environment | |
CN106293680A (zh) | 一种组件管理方法及装置 | |
US20100094905A1 (en) | Method for manipulating objects in a SOA registry | |
US6792596B2 (en) | Method and system for protecting resource central programs | |
CN112860420B (zh) | 基于硬件虚拟化的数据处理方法及装置 | |
Gao et al. | Applying Aspect-Orientation in Designing Security Systems: A Case Study. | |
CN103186386A (zh) | 应用加载方法及系统 | |
US8484614B2 (en) | Fast late binding of object methods | |
CN115269040B (zh) | 一种租户业务应用的拓展方法、装置及系统 | |
CN112445851A (zh) | 一种插拔式orm框架实现方法、装置、电子设备和存储介质 | |
CN115712456A (zh) | 基于springboot的依赖管理与工具集成方法 | |
CN108153564B (zh) | 界面管理方法、设备及系统和计算机可读存储介质 | |
KR20100110710A (ko) | 동적 라이브러리를 갖는 인터페이스를 간단히 하는 방법, 시스템 및 컴퓨터 프로그램 제품 | |
CN101882190B (zh) | 字节码中间表示程序的分模块形式化验证方法 | |
CN114358936A (zh) | 一种基于微服务区块链的智能合约运行方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170104 |