一种基于组件的软件系统架构及软件实现方法与流程

文档序号:16206893发布日期:2018-12-08 07:13阅读:348来源:国知局
一种基于组件的软件系统架构及软件实现方法与流程

本技术涉及软件开发领域,具体而言涉及一种基于组件开发的软件系统架构和实现方法。

背景技术

软件架构(softwarearchitecture)是指在一定的设计原则基础上,从不同角度对组成软件系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,软件架构描述的对象是直接构成系统的抽象组件。一般而言,软件系统的架构有两个要素:一是软件系统从整体到部分的最高层次的划分,即一个软件系统通常包括架构组件(architecturecomponent)、联结器(connector)、任务流(task-flow);二是若确定了软件系统架构设计,后期的技术和商业对其难以更改,在建造一个软件系统之前会有很多的重要决定需要事先作出。软件体系结构是构建计算机软件工程实践的基础,用于指导软件系统各个方面的设计。在传统的软件工程实践中,特别是对于大型的应用软件,没有标准的规范去约束如何实现组件式软件开发。不同技术方案对大型应用软件的开发、测试、维护影响较大,较好的软件架构设计方案可以使得大型软件实现组件式开发管理、动态化配置和功能扩展,也可以容易的通过添加或者改变不同功能组件定制不同的软件需求。

传统的软件工程实践中存在如下不足之处:由于软件架构设计的先天缺陷,软件复杂度会随着软件规模扩大越来越高;软件不同组件耦合度较为紧密,复用困难,造成开发效率低;组件之间热插拔难度较大,当某一模块或组件出现异常或不能使用,往往会导致其他模块和组件无法正常使用甚至死机等现象,系统不稳定因素难以控制等等。



技术实现要素:

基于上述问题,本发明提出了一种大型软件应用软件架构,可以实现利用c++语言基于组件的模块化管理模式开发软件系统,使得开发者较为容易实现可插入和易于扩展的大型跨平台桌面应用软件系统,例如window、linux或ios平台。

一种基于组件的软件系统架构及软件实现方法,包括:对象树结构模块、对象容器及其监控模块、对象内容描述文件、事件分发模块、组件服务管理模块、日志记录模块、对象ipc通讯模块组成。其特征在于组件之间不同对象模块通过事件信号发送和事件监测实现,由于各个功能单元之间无需互相调用,使得各个对象模块的功能独立,因此本发明的基于组件软件架构不存在对象模块边界不清、模块耦合性高、模块扩展性差、模块不易裁剪等缺陷,从而实现软件系统架构基础上动态配置多种标准接口的组件模块;基于该软件架构组件库规范统一的约束下实现组件复用,适用于团队协作开发,代码可重用,节约人力和时间,且能够实现不同软件对象的调用和信号传递。

上述的软件系统架构及软件实现方法的对象树结构模块是组件及其包含注册对象的逻辑关系模式,对象树状结构是一个或多个节点的有限集合,每个节点表征加载在应用程序中的组件及其组件包含对象的相关信息,包括:节点的名称、节点的路径、对象指针和信息容器。其中节点的名称在相同层次节点名称应当独一无二;节点的路径是指该节点在应用程序中的对象树结构的逻辑关系,路径的节点层次以点(.)分割;对象指针是指向该对象在计算机内存中地址,在该对象构造过程中或者删除后,对象指针为空,在整个对象树中,不允许两个节点指向同一个对象;信息容器是指该节点的一些属性特征、信号与槽函数和其他必要的信息等,一般而言,信息是以键值对(key=value)形式管理。

上述的软件系统架构及软件实现方法的对象容器及其监控模块主要是为了管理应用程序运行所依赖的对象和服务。应用程序由多个组件集成,而每个组件包含多个对象,对象容器可以有效的地管理这些对象及其不同对象之间的交叉依赖关系,包括列表容器、序列-对象关联容器。同时还能监控对象容器的外部请求执行插入、删除、销毁等业务操作,并发送相应的事件信号等。

上述的软件系统架构及软件实现方法的对象内容描述文件为组件将注册在对象树结构模块中的对象列表及相关信息,在同一组件的对象内容描述文件中,每个对象应当有一个独一无二的名称,相关信息包括该对象的属性信息、事件及处理函数信息和其他信息。

上述的软件系统架构及软件实现方法中,当组件被应用程序加载时,事件分发模块将依次分发系列启用组件事件信号,分别为预初始化事件信号、预加载设置文件事件信号、后加载设置文件事件信号、预加载对象内容描述文件事件信号、后加载对象内容描述文件事件信号、后初始化事件信号、预激活事件和后激活事件信号;后初始化事件函数被执行就意味着组件已经被初始化完毕。同样道理,组件被应用程序卸载时,将依次分发系列停用组件事件信号,分别为预解除事件和后解除事件信号、预销毁事件信号、预卸载对象内容描述文件事件信号、后卸载对象内容描述文件事件信号、预卸载设置文件事件信号、后卸载事设置文件信号、后结束事件信号;后结束事件函数被执行就意味着组件已经被完全停用和注销。组件或组件服务管理模块接收了事件信号后执行相应的事件处理函数。

上述的软件系统架构及软件实现方法中,当执行加载对象内容描述文件事件函数,组件服务管理模块委托事件分发模块根据对象内容描述文件依次分发对象加载事件信号和对象融合事件信号,,当执行卸载对象内容描述文件事件函数,组件服务管理模块委托事件分发模块依次发送对象拆分事件信号和对象分解事件信号,组件服务管理模块将事件信号反射至需要融合和分解的对象组件,该组件执行对应的事件处理函数。

上述的软件系统架构及软件实现方法中,所述的事件处理函数声明为虚函数,使得开发者能够重新实现相应的事件处理的函数或方法。

上述的软件系统架构及软件实现方法中,所述的组件服务管理模块结合对象容器及其监控模块和对象树结构模块组合控制组件加载、卸载、激活、挂起、查找等基本操作,实现对应用程序加载所有组件及其对象的资源有效且灵活的动态管理和热插拔功能。

上述的软件系统架构及软件实现方法中,所述的日志记录模块是为满足软件运行过程的有关信息输出或记录的独立模块,开发者可以根据需要输出警告、调试、致命和提示等信息,其中调试和致命信息被有效处理或解决后,日志记录模块将删除相应的记录。

上述的软件系统架构及软件实现方法中,所述的对象ipc通讯模块用于本地不同应用程序或局域网之间不同应用程序的对象调用和通讯。应用程序的ipc通讯模块宿主对象监听其他应用程序的特殊对象的事件信号,并根据监听的事件信号执行相应的事件处理函数,从而实现基于互联网的不同应用程序之间的对象调用和通讯。

在上述事件分发模块技术方案中,优选地,提供一个基础组件类,所述的基础组件类及其子类的构造函数声明为公共类型,而析构函数则声明为保护类型,从而确保组件实例化和被执行时分配在内存的堆中,而不是在内存的栈中。

在上述组件基础类及其子类技术方案中,优选地,可以使用共享库或静态库加载组件,实现组件实例化,也可以独立创建实例。

在上述技术方案中,优选地,所述服务管理模块监测对象发送的事件信号,统一管理不同组件发布的各种事件信号,从而有利于提升系统框架的稳定性和可扩展性。

与现有技术相比,本发明的有益效果是:(1)在组件管理模式方面,通过对象树的结构模块描述或表征组件及其包含的对象之间的逻辑关系模式,使得组件管理清晰明了,通过对象树结构模块操作和监控应用程序的所有组件及其包含的对象,实现了大型桌面软件系统的功能组件及其对象有效且灵活的动态管理和热插拔,对于复杂的大型软件系统集成,能有效降低软件复杂度,其扩展性、稳定性更好。(2)设计了组件的初始化和注销的系列事件信号分发,而且事件的处理函数声明为虚函数,开发者可以灵活的自定义初始化和注销事件的相关处理函数。(3)本发明的ipc通讯模块使得基于网络不同应用程序之间的对象调用和通讯,实现网络不同应用程序协同工作等目的。

附图说明

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进一步的详细描述。

图1示出了本软件系统架构的框图。

图2示出了本实施例的xml文件格式的对象内容描述文件实例。

图3示出了本实施例的json文件格式的对象内容描述文件实例。

图4示出了本软件系统架构的对象树结构示意图。

图5示出了本软件系统架构的组件加载过程发送的事件流程。

图6示出了本软件系统架构的组件卸载过程发送的事件流程。

具体实施方式

需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

在图1中,本软件系统架构的服务管理模块101集成了对象树结构模块102、对象容器及其监控模块103。具体实施过程中,首先由业务组件104指定对象内容描述文件105,然后服务管理模块101加载业务组件104,解析对象内容描述文件,同时委托事件分发模块106发送系列启用组件事件信号,并反馈至服务管理模块101,由服务管理模块101将事件信号反射至业务组件104,并激活组件,业务组件104根据事件信号执行对应的处理函数;服务管理模块101将解析的对象指针存储在对象容器及其监控模块103中,同时将对象路径注册在对象树结构模块102。

本软件系统架构的服务管理模块101以上述类似的过程加载更多的业务组件104等,从而实现软件系统有效管理更多业务组件,实现更多功能。

上述的具体实施过程中,对象容器及其监控模块103的对象指针插入、删除、销毁等操作动作,将发送相应的对象容器插入、删除、销毁等监控信号,对象树结构模块102接收监控信号,并根据相应的监控信号执行对象树结构模块中该对象的注册和注销等动作,使得对象容器和对象树结构的对象保持一致的对应关系。

在上述技术方案中,优选地,还包括日志记录模块107,所述的日志记录模块107可以根据需要输出警告、调试、致命和提示等信息,信息以文本格式输出至硬盘、显示屏等终端。

在上述技术方案中,优选地,还包括对象ipc通讯模块108,所述的对象ipc通讯模块108实现跨网络之间不同应用程序的不同对象相互调用和信息交换等。

本发明还提供了基于组件的软件系统架构及软件实现方法的c/c++库,由于采用了c/c++语言及其标准库,可灵活的移植到不同的操作系统平台。

在上述技术方案中,优选地,所述的c/c++语言软件系统架构库对象内容描述文件模块采用键值对的json格式文件描述组件需要加载的对象,或可扩展标记语言的xml格式文件描述组件需要加载的对象。

下面将结合图2至图6对基于本发明技术方案的软件架构系统的软件开发过程进一步说明。在以下具体地实施例中,采用qt跨平台c++图形用户界面库构建软件系统。为了便于描述,分别将组件服务管理模块101命名为applicationservice类,对象树结构模块102命名为objecttree类,对象树节点命名为objecttreenode,对象容器及其监控模块103命名为objectmap类,事件分发模块106命名为eventsdispatcher类,对象内容描述文件105命名为objectcontentfile,业务组件104为扩展系统的功能组件类,可按功能命名为*component类,功能组件类的父类或基类命名为basecomponent类,为了方便业务组件104的按标准模板编写,basecomponent类定义不同事件的处理函数,并声明为虚函数,由功能组件类具体实现虚函数的处理方法,编译系统将按照同名覆盖的原则决定调用的派生类事件处理函数。qt跨平台c++图形用户界面库中,basecomponent类可以继承自qobject类。

由于qt既可以开发图形界面程序,也可用于开发非图形界面程序,其中非图形界面程序使用qcoreapplication类提供一个主事件循环机制,图形界面在继承qcoreapplication基础上提供了不绑定qwidget库qguiapplication类和绑定qwidget库qapplication类,用于管理图形用户界面应用程序的控制流和主要设置。软件系统开发中,为了使用本发明的技术方案的组件服务管理模块101,采取多重继承的方法对qcoreapplication类和applicationservice类创建新类并命名为的comapplication类,则comapplication类同时包含了qt的主事件循环机制和本发明提供的组件管理机制。同样道理,若对qguiapplication类或qapplication类和applicationservice类多重继承创建新类并命名为的gcomapplication类,则gcomapplication类不仅包含了qt的主事件循环机制和本发明提供的组件管理机制,还包含qt的图形界面控制流和主要管理设置等。

具体实施过程中,功能组件类的派生类需指定该组件的对象内容描述文件objectcontentfile。

图2和图3为本发明技术方案软件架构的一种xml和json格式的对象内容描述文件,其中图2中对象内容描述文件所属的组件为filebrowercomponent,对象为对象列表为一个数组,该对象的独一无二的名称为filebrower,称之为filebrower对象,filebrower对象的属性信息为最大宽度为30,filebrower对象的信号及其对应槽函数分别为该组件的filedoubleclicked(qstring)与textviewcomponent组件的openfile(qstring)函数连接,以及filebrower对象的其他一些信息,例如:filebrower对象的type信息为widget,等组件服务管理模块applicationservice类加载组件时解析type信息并发送系列的加载事件信号至filebrowercomponent组件,由filebrowercomponent组件相应的事件处理函数指定该对象继承于qwidget;指定filebrower对象parent信息为textviewercomponent.window,layoutposition信息为0,0,加载组件的并解析filebrower对象的parent信息,则filebrowercomponent组件的filebrower对象与textviewercomponent组件的window对象融合处理,并防止在window对象0,0位置。图3中该内容描述文件的所属的组件为textviewercomponent,对象为对象列表为一个数组,包含的对象名称分别为window、textedit、menubar、editmenu、cutaction、copyaction、pasteaction、clearaction,其中window对象的属性windowtitle为textviewer、maximumwidth为800、minimumheigh为600等。

上述实施例中xml格式的对象内容描述文件可以用json格式表征,同样道理,json格式的对象内容描述文件可以用xml格式表征。但若使用json格式表征对象内容描述文件时,可利用qt的qstr()对文本进行国际化翻译。

图4示出了本软件的对象树objecttree的结构形象示意图。对象树节点objecttreenode的根节点为application,是指该应用软件系统的实例,而其他对象树节点是指该对象在该应用软件系统的路径,路径名以点(.)分割。例如:图2中所示内容描述文件的filebrower对象在对象树结构中的路径表述为application.filebrowercomponent.filebrower,图3中所示内容描述文件的textedit对象和pasteaction对象在对象树中的路径分别表述为application.textviewercomponent.textedit和application.textviewercomponent.pasteaction等。同一层次的对象在对象树结构中应只有唯一的名称,例如在textviewercomponent层次的应仅有唯一的pasteaction名称。但不同的层次的对象可以有相同的名称。

图5示出了本软件架构系统的组件加载时发送的系列事件信号流程,加载如图2所属的功能filebrowercomponent功能组件,则applicationservice类根据加载的组件信息委托eventsdispatcher类发送系列组件启用事件信号,applicationservice类将信号反射至filebrowercomponent功能组件执行相应的事件处理函数,例如:执行设置文件加载事件处理函数从设置文件读取该组件的相关设置,若无相关设置,该处理函数可以为空操作,设置文件可以从文本或注册表信息(window系统的)等文件中读取;执行对象内容描述文件加载事件处理函数则从指定需要解析的objectcontentfile的文件路径,applicationservice类将解析objectcontentfile所有对象,并将对象指针存储于objectmap中,objecttree根据objectmap的入操作信号将该对象注册在objecttree中,与此同时,applicationservice类委托eventsdispatcher类发送对象融合事件,filebrowercomponent功能业务组件执行对应的事件处理函数等,例如:根据图2中所示内容描述文件的filebrower对象与图3所示内容描述文件的window对象融合,且根据layoutposition信息,filebrower对象放置window对象的0,0坐标。当执行了后激活时间事件处理函数,filebrowercomponent功能业务组件被applicationservice类完全启用。同样道理,applicationservice类加载并启用textviewercomponent等功能业务组件。

图6示出了本软件架构系统组件停用时发送的事件信号流程,例如卸载filebrowercomponent组件,则applicationservice类根据卸载信息委托eventsdispatcher类发送系列组件停用事件信号,applicationservice类将事件信号反射至filebrowercomponent功能业务组件执行相应的组件停用前的事件处理函数,例如执行设置文件卸载事件处理函数将该组件相关设置信息写入文本或注册表文件等,若无相关设置,该函数可执行空操作;同时,applicationservice类从对象容器和监控模块objectmap中删除对象指针,对象树结构模块将该对象从objecttree中注销,与此同时,applicationservice类委托eventsdispatcher类发送对象解除事件,filebrowercomponent功能业务组件业务执行相应的事件处理函数等。当执行了后结束事件处理后,filebrowercomponent功能业务组件被applicationservice类完全停用。同样道理,applicationservice类加载并停用textviewercomponent等功能业务组件。

以此流程停用textviewercomponent功能业务组件。

作为一种优选方案,事件处理函数可以利用本发明技术方案的日志记录模块输出相关信息等。

作为一种优选方案,本软件架构系统提供了封装tcp传输控制协议的对象ipc通讯模块,使得本机和基于互联网中两个软件的不同对象相互调用和数据通信等。首先,在其中a应用软件系统中包含s1事件信号,在b应用软件系统中对象中包含s1事件处理函数,且声明为public类型,在b应用软件系统的对象内容描述文件中添加该对象allowreomotaccess:true信息;然后,连接a应用软件系统中包含s1事件信号与b应用软件系统中包含s1事件处理函数。这样,运行两个应用软件时,只要发送了a应用软件系统中包含s1事件信号,b应用软件系统中s1事件处理函数将被激活和执行等。

显然,所描述的实施例中的对象树、对象内容描述文件可以采用其他格式文件进行表征。

以上所述实施例仅表达了应用具体个例对本申请的原理及实施方式进行了阐述,其描述较为具体和详细,用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1