基于插件的软件开发方法与流程

文档序号:12200640阅读:440来源:国知局
基于插件的软件开发方法与流程
本发明涉及计算机技术,特别涉及一种基于插件的软件开发方法。

背景技术:
插件技术由于其可选择、可扩充、可替换的特性,被广泛的应用在各种应用软件的开发中,并取得了良好的效果。目前主要有两类应用情景。第一类用来扩充现有的软件功能。比较有名的应用案例有:(1)Firefox浏览器,有成千上万的功能、美化、定制插件,如IETab插件、FireFTP插件。(2)Photoshop,有滤镜、抠图、磨皮、纹理导出等等丰富和方便其功能和使用的插件。(3)3DSMax和Maya,有数据导出插件,用于在游戏开发中导出3DSMax或Maya编辑的模型、骨骼、场景等数据为游戏需要的磁盘文件。第二类用来实现可选的技术手段。通过插件技术实现软件的部分组成模块,以能够在不同的应用程序需求下,替换使用不同的组成模块。比如在游戏引擎领域,对GL或D3D渲染器的选择,通常就会采取插件的方式实现,比较典型的案例是OGRE引擎的渲染器。不论是第一种应用案例情景,还是第二种应用案例情景,插件都只是被作为软件开发中的辅助手段,没有将插件作为整个软件的开发框架,而是将插件技术应用在了某个局部,用以改善扩展性。第一种情景下,通过实现软件框架定义的插件接口规范来实现插件,由软件加载和驱动插件工作,以扩充和完善软件的功能和效果;第二种情景下,通过替换使用不同的插件,来达到软件性能的优化、效果的改善等。目前的基于插件的软件开发方法,其插件通常是针对特定应用场景,事先约定调用接口规范,或基于COM(ComponentObjectModel,组件对象模型)技术的插件实现方法,其插件主要由调用方定义被调用接口,实现方实现这些接口约定和语义,调用方通过确定的插件管理器,获取到插件实现对象,并调用其接口实现。如OGRE(Object-OrientedGraphicsRenderingEngine,面向对象图形渲染引擎)的渲染器插件和OGRE的场景管理插件,它们的实现就约定了渲染器必须实现调用者定义的渲染接口规范,场景管理器必须实现调用者定义的场景管理接口规范。目前的基于插件的软件开发方法,其软件框架,都是针对特定领域的、具象的框架结构。如OGRE是游戏领域,其构建了一套图形引擎框架结构,并给出了相关实现;再如ACE(adaptivecommunicationenvironment,是一套C++的通信库,它提供了socket/threading/memorymanagement等多种系统调用的面对对象的wrapper,使C++通信软件开发更加简单),其是网络模型领域。目前的基于插件的软件开发方法,其主要存在以下缺点:a.由于其软件框架应用局部范围,且未解决通用插件框架的构建问题,故而针对不同类型的应用,调用方均需要搭建不同的插件管理框架实现一个新的插件的管理功能,付出了额外的实施成本。b.从插件接口的约定上,由于采用由调用方起着主导约定的定义方式,依赖框架实现,插件需要连接到框架代码,这要求调用方具备较高的设计抽象能力。c.从软件框架的搭建上,由于软件框架本身和应用类型和应用局部相关,针对不同应用场景,软件框架的设计模型不一,应用方需要具备丰富的相关领域的知识背景,提高了架构设计者本身的要求,加重了应用开发对不同应用场景架构的理解成本和实施成本,并且如果要将不同应用场景架构整合在一起时,需要对框架进行大量的改动,非常不方便。

技术实现要素:
本发明要解决的技术问题是提供一种基于插件的软件开发方法,服务框架本身和应用类型无关,可以方便嵌入到任何技术方案之中,且不需要修改,方便了功能插件和各种技术方案的整合。为解决上述技术问题,本发明提供的基于插件的软件开发方法采用的技术方案是:分别开发一个服务框架和多个服务插件;所述服务框架,用于实现服务框架服务接口,并管理驱动服务插件运行;实现服务框架服务接口,是建立服务接口和服务名的一一对应,一个服务接口是指一个服务插件提供的功能接口,服务名是指用于查询服务接口指针的名字;管理驱动服务插件运行,包括服务插件的加载、卸载及更新,服务框架在加载服务插件时,调用服务插件的初始化函数并输入服务框架接口给该初始化函数;在卸载服务插件时,调用服务插件的最终化函数;在更新服务插件时,调用服务插件的更新函数并输入上一帧开始执行到本帧开始执行所流逝的时间给该更新函数;每个服务插件,包含有初始化函数、最终化函数、更新函数三个全局导出函数,其中,初始化函数以服务框架接口作为参数,最终化函数无参数,更新函数以时间为参数,服务插件通过服务框架调用初始化函数时传入的服务框架接口来和软件的其他模块或插件交互。所述服务框架管理驱动服务插件运行,可以包括以下步骤:一.加载服务插件,调用其初始化函数,供服务插件初始化资源;二.如果上一帧开始执行到本帧开始执行所流逝的时间大于设定值,则调用该服务插件的更新函数,实现该服务插件的帧更新;三.检查服务插件是否请求退出,如果请求退出则进行步骤四,否则进行步骤二;四.调用服务插件的最终化函数,供插件回收资源。服务插件可以是以C语言方式导出的windows系统的dll或类Unix系统的so文件。本发明的基于插件的软件开发方法,将插件技术作为软件的开发主框架技术,分别开发一个服务框架和多个服务插件,将功能实现抽象为功能接口,并为每个功能接口命名,分别作为服务接口和服务名,注册到服务框架的服务框架接口,供其它代码模块访问。服务框架的服务框架接口由应用程序实现,服务框架接口通过建立服务接口和服务名的一一对应,利用服务名的唯一性识别来实现服务注册、服务查询、服务注销,服务框架接口在服务插件初始化的时候传入服务插件。服务插件包括初始化、最终化、更新三个全局导出函数,服务框架通过分别调用三个全局导出函数管理服务插件的加载、卸载及更新,服务插件和服务框架间无静态连接依赖关系。本发明的基于插件的软件开发方法,通过将服务框架接口化和构建与应用无关的插件驱动机制,使得服务插件不需要连接到服务框架,只需要服务框架程序提供服务框架接口,实现了服务插件开发和服务框架的无关性,服务框架只定义了服务名和服务接口的关联,服务框架本身和应用类型无关,可以方便嵌入到任何技术方案之中,且不需要修改,方便了功能插件和各种技术方案的整合。附图说明为了更清楚地说明本发明的技术方案,下面对本发明所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明的基于插件的软件开发方法的软件结构一实施例示意图;图2是本发明的基于插件的软件开发方法的软件服务框架管理服务插件的一实施例示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。本发明的基于插件的软件开发方法一实施方式:分别开发一个服务框架和多个服务插件,一实施例的软件结构如图1所示,软件包括服务框架及分别用于扩展服务、应用服务、图形服务、网络服务、输入服务或其他服务的多个服务插件;所述服务框架,用于实现服务框架服务接口,并管理驱动服务插件运行;实现服务框架服务接口,是建立服务接口和服务名的一一对应,从而利用服务名的唯一性识别来实现服务注册、服务查询、服务注销,一个服务接口是指一个服务插件提供的功能接口(通常C++服务接口指含有纯虚函数的class或struct),服务名是指用于查询服务接口指针的名字(通常C++服务名指std::string);实现服务框架接口,一实施例如下:其中FRAME_API为空,主要作为修饰用;GetService根据服务名返回服务接口;RegService将服务接口注册到指定的服务名;UnregService注销指定服务名的服务;void*为服务接口指针,用于传入参数和返回值;管理驱动服务插件运行,包括服务插件的加载、卸载及更新,服务框架在加载服务插件时,调用服务插件的初始化函数并输入服务框架接口给该初始化函数;在卸载服务插件时,调用服务插件的最终化函数;在更新服务插件时,调用服务插件的更新函数并输入上一帧开始执行到本帧开始执行所流逝的时间给该更新函数;所述服务框架管理驱动服务插件运行一实施例如图2所示,包括以下步骤:一.加载服务插件,调用其初始化函数,供服务插件初始化资源;二.如果上一帧开始执行到本帧开始执行所流逝的时间大于设定值,则调用该服务插件的更新函数,实现该服务插件的帧更新;三.检查服务插件是否请求退出,如果请求退出则进行步骤四,否则进行步骤二;四.调用服务插件的最终化函数,供插件回收资源。示例如下:每个服务插件,包含有初始化函数、最终化函数、更新函数三个全局导出函数,其中,初始化函数以服务框架接口作为参数,最终化函数无参数,更新函数以时间为参数,三个全局导出函数均无需返回值,服务插件通过服务框架调用初始化函数时传入的服务框架接口来和软件的其他模块或插件交互,可选的更新函数提供了服务插件进行帧更新的可能。服务插件可以是以C语言方式导出的windows系统的dll或类Unix系统(如Unix、Linux、FreeBSD、MacOS、BeOS等操作系统)的so文件。本发明的基于插件的软件开发方法,将插件技术作为软件的开发主框架技术,分别开发一个服务框架和多个服务插件,将功能实现抽象为功能接口,并为每个功能接口命名,分别作为服务接口和服务名,注册到服务框架的服务框架接口,供其它代码模块访问。服务框架的服务框架接口由应用程序实现,服务框架接口通过建立服务接口和服务名的一一对应,利用服务名的唯一性识别来实现服务注册、服务查询、服务注销,服务框架接口在服务插件初始化的时候传入服务插件。服务插件包括初始化、最终化、更新三个全局导出函数,服务框架通过分别调用三个全局导出函数管理服务插件的加载、卸载及更新,服务插件和服务框架间无静态连接依赖关系。本发明的基于插件的软件开发方法,通过将服务框架接口化和构建与应用无关的插件驱动机制,使得服务插件不需要连接到服务框架,只需要服务框架程序提供服务框架接口,实现了服务插件开发和服务框架的无关性,服务框架只定义了服务名和服务接口的关联,服务框架本身和应用类型无关,可以方便嵌入到任何技术方案之中,且不需要修改,方便了功能插件和各种技术方案的整合。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1