一种插件式的计算机程序设计架构的制作方法

文档序号:6428769阅读:245来源:国知局
专利名称:一种插件式的计算机程序设计架构的制作方法
技术领域
本发明涉及一种插件式的计算机程序设计架构,尤其是可以将软件在不同生命周期所产生的新功能,不需要重新编译程序,只需通过预留的接口既可以使用新的功能。
背景技术
如今,计算机程序繁复多样,但是基本上所有的软件生命周期中,都会随着时间推移,用户需求发生不断的变化,特别的,当用户需求开发者新增功能或者改变功能时,开发者发现原有的软件架构已经无法胜任新的任务需求时,开发者需要重新设计这个程序的架构。
但是实际问题是,即使用了一个开发周期,完成了需求提出的任务后,区不能保证用户需求的再次变更或新增,需求蔓延的可能性依然存在。因此,急需要一种插件式的架构,来应对此种情况。现有的插件技术,首先是脚本式。使用某种语言把插件的程序逻辑写成脚本代码。而这种语言可以是Python,或是其他现存的已经经过用户长时间考验的脚本语言。甚至,你可以自行设计一种脚本语言来配合你程序的特殊需要。当然,用当今最流行的XML是再合适不过了。这种形式的缺点在于,稍有点编程知识的用户就可以自行修改你的脚本,因为这种情况所造成的后果是不可预知的,对软件本身使用非常不安全。其次是聚合式。顾名思义,就是把插件功能直接写成EXE。主程序除了完成自己的职责外,还负责调度这些“插件”。但是,这中模式使插件与插件之间,主程序与插件之间的信息交流困难了许多。所以也是存在一定的缺陷。

发明内容
为了克服现有的软件插件设计框架的主程序与插件之间的信息交流复杂性,以及使用安全性问题,本发明提供了一种插件式的程序设计架构,本发明所述的架构中,插件功能以动态库函数的形式存在。主程序通过接口获得插件DLL中的函数签名,然后在合适的地方调用它们。通过接口技术,我们的插件需要做的只是实现程序定义的接口。主程序不需要知道插件怎样实现预定的功能,它只需要通过接口访问插件,并提供主程序相关对象的接口。这样一来,主程序与各插件之间的信息交流就变得异常简单。并且,插件对于主程序来说是完全透明的。该架构不仅能降低主程序与插件之间信息交流的复杂度,还能保障插件在使用过程中的稳定性,不会对主程序本身带来任何安全性的影响。从而大大提升了该框架的实用性和稳定性,为应对需求蔓延所带来的程序功能变化提供了基础。本发明对于解决这些技术问题,所采用的技术方案是首先,进行接口的设计。我们的程序编辑器会向插件开放正在使用的业务对象。程序启动后,就枚举每一个插件并把它连接到主程序,同时传递主程序中业务对象到接口。插件可以通过这个接口来请求主程序的业务对象或访问主程序功能。根据上面的需求,我们首先需要一个主程序接口 IApplicationObject。其次,进行业务对象接口的设计。这个接口是连接主程序中的业务对象和插件的一个纽带,为插件提供业务对象的操作方法和属性。接口名称=IBizObject。这个业务对象接口根据不同的业务场景可以灵活的为对象定义方法和属性,所以没有一个统一的标准和内容,只需符合一般类方法的规则既可。再次,根据插件在其生命周期里的行为,设计插件的接口 IPlugin。此接口定义了插件生命周期中各个方法,主程序会首先调用ConnectO方法,并传递IApplicationObject给插件。插件在这个过程中做一些初始化工作。然后,插件的OnLoadO方法被调用。在这之后,当主程序接收到调用插件的信号时(键盘、鼠标响应)就会调用插件的RunO方法来启动这个插件。程序结束时,调用其OnDestoryO方法。这 样,插件的生命才宣告结束。然后,为了方便管理和识别插件,还要为插件定义一个属性类PluginInfoAttributeo可以保存它的名称、版本及作者等信息,通过这个类修饰插件,并让它实现IPlugin接口。最后,将插件式的程序设计架构引用到一个计算机软件程序中,让主程序调通过这个架构,调用编写好的插件即可。


图I是插件式架构的示意图 图2是本发明的类结构图 图3是本发明的工作流程图 图4是本发明实施例图之一 图5是本发明实施例图之二 图6是本发明实施例图之三 图7是本发明实施例图之四 图8是本发明在使用过程中的文件夹结构图
具体实施例方式 通过图2所示,我们先建立这个插件式架构,根据图2中所示的类结构图,建立各个类的类文件。其中包括IPlugin、IApplicationObject、PluginInfoAttribute、MyPluginl0在基本接口和类方法搭建完毕后,本实施例是一个文本输入的实例,主程序所要操作的业务对象为一个文档对象,所以,针对IBizObject接口,我们作如下定义
public interface IDocumentObject {
//这些属性是RichTextBox控件的相应的属性映射 string SelectionText { get ; set ; }
Color SelectionColor { get ; set ; }
Font SelectionFont { get ; set ; } int SelectionStart { get ; set ; }int SelectionLength { get ; set ; } string SelectionRTF { get ; set ; } bool HasChanges { get ; } void Select ( int start , int length ); void AppendText( string str ); void SaveFile ( string fiIeName ); void SaveFile ();
void OpenFile( string fiIeName ); void CloseFile ();
}
在这里,IBizObject被重新命名为IDocumentObject,里面提供了对文档进行操作的
常用方法。·然后,编写插件功能,该插件的功能是向业务对象(文档)插入用于自定义的文字,通过让插件方法集成IPlugin接口,获取可以跟主程序交互的方法和属性,然后为插件编写具体的逻辑代码,最后封装好,存放于图8所示的插件文件夹下,等待主程序调用。最后,在主程序中,通过代码,调用存放于插件文件夹下的插件,如图4所示。插件启动后,如图5所示。我们针对业务对象“新文件-0”,为其添加文字“ 1234”并单击插件中的确定按钮后,得到如图6所示的效果,可见,我们的插件通过接口,获悉操作的业务对象为“新文件-0”,并且将操作结果,作用于该文档中。然后,我们通过新建文件功能,为程序添加一个新的业务对象“新文件-1”,还是调用插件,为该文档添加文字“2222”,如图7所示,同样操作顺利完成。
权利要求
1.一种插件式的计算机软件设计架构,在软件功能需求发生较大改变时,可以灵活的对程序功能进行修改,而不需要重新设计程序架构,其特征是通过定义接口 IPlugin、接口 IApplicationObject、类 PluginInfoAttribute 以及接口 IBizObject 四个部分,完成一个插件式的计算机软件架构。
2.根据权利要求I所述的一种插件式的计算机软件设计架构,其特征是IPlugin接口根据插件在其生命周期里的行为,设计插件的接口 IPlugin,此接口定义了插件生命周期中各个方法,主程序会首先调用ConnectO方法,并传递IApplicationObject给插件,插件在这个过程中做一些初始化工作,然后,插件的OnLoadO方法被调用,在这之后,当主程序接收到调用插件的信号时(键盘、鼠标响应)就会调用插件的RunO方法来启动这个插件,程序结束时,调用其OnDestoryO方法,这样,插件的生命才宣告结束。
3.根据权利要求I所述的一种插件式的计算机软件设计架构,其特征是通过定义IApplicationObject接口,我们的程序编辑器会向插件开放正在使用的业务对象,程序启动后,就枚举每一个插件并把它连接到主程序,同时传递主程序中业务对象到接口,插件可以通过这个接口来请求主程序的业务对象或访问主程序功能。
4.根据权利要求I所述的一种插件式的计算机软件设计架构,其特征是通过定义IBizObject接口,为业务对象和插件功能提供一个交互的桥梁,这个接口是连接主程序中的业务对象和插件的一个纽带,为插件提供业务对象的操作方法和属性,这个业务对象接口根据不同的业务场景可以灵活的为对象定义方法和属性,所以没有一个统一的标准和内容,只需符合一般类方法的规则既可。
5.根据权利要求I所述的一种插件式的计算机软件设计架构,其特征是为了方便管理和识别插件,还要为插件定义一个属性类=PluginInfoAttribute,可以保存它的名称、版本及作者等信息,通过这个类修饰插件,并让它实现IPlugin接口。
6.根据权利要求I所述的一种插件式的计算机软件设计架构,其特征是通过设定一个特殊的文件夹,来存放编译好的插件文件,以供主程序调用。
7.根据权利要求I所述的一种插件式的计算机软件设计架构,其特征是插件文件以函数类库的形式独立存在于主程序之外,主程序通过接口,与这些插件通信。
全文摘要
一种插件式的计算机软件设计架构,采用了接口作为技术基础,插件功能以动态库函数的形式存在。主程序通过借口获得插件DLL中的函数签名,然后在合适的地方调用它们。通过接口技术,我们的插件需要做的只是实现程序定义的接口。主程序不需要知道插件怎样实现预定的功能,它只需要通过接口访问插件,并提供主程序相关对象的接口。主程序与各插件之间的信息交流就变得异常简单。并且,插件对于主程序来说是完全透明的。有效缓解了软件功能需求的变更对原有软件架构的影响。
文档编号G06F9/44GK102890627SQ20111020124
公开日2013年1月23日 申请日期2011年7月19日 优先权日2011年7月19日
发明者范建炜, 范毅龙, 张洪建 申请人:昆明伯尔瑞科技开发有限公司, 昆明有色冶金设计研究院股份公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1