CN102890627A - 一种插件式的计算机程序设计架构 - Google Patents
一种插件式的计算机程序设计架构 Download PDFInfo
- Publication number
- CN102890627A CN102890627A CN 201110201241 CN201110201241A CN102890627A CN 102890627 A CN102890627 A CN 102890627A CN 201110201241 CN201110201241 CN 201110201241 CN 201110201241 A CN201110201241 A CN 201110201241A CN 102890627 A CN102890627 A CN 102890627A
- Authority
- CN
- China
- Prior art keywords
- plug
- unit
- interface
- master routine
- function
- 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
Images
Landscapes
- Stored Programmes (AREA)
Abstract
一种插件式的计算机软件设计架构,采用了接口作为技术基础,插件功能以动态库函数的形式存在。主程序通过借口获得插件DLL中的函数签名,然后在合适的地方调用它们。通过接口技术,我们的插件需要做的只是实现程序定义的接口。主程序不需要知道插件怎样实现预定的功能,它只需要通过接口访问插件,并提供主程序相关对象的接口。主程序与各插件之间的信息交流就变得异常简单。并且,插件对于主程序来说是完全透明的。有效缓解了软件功能需求的变更对原有软件架构的影响。
Description
技术领域
本发明涉及一种插件式的计算机程序设计架构,尤其是可以将软件在不同生命周期所产生的新功能,不需要重新编译程序,只需通过预留的接口既可以使用新的功能。
背景技术
如今, 计算机程序繁复多样,但是基本上所有的软件生命周期中,都会随着时间推移,用户需求发生不断的变化,特别的,当用户需求开发者新增功能或者改变功能时,开发者发现原有的软件架构已经无法胜任新的任务需求时,开发者需要重新设计这个程序的架构。
但是实际问题是,即使用了一个开发周期,完成了需求提出的任务后,区不能保证用户需求的再次变更或新增,需求蔓延的可能性依然存在。因此,急需要一种插件式的架构,来应对此种情况。
现有的插件技术,首先是脚本式。使用某种语言把插件的程序逻辑写成脚本代码。而这种语言可以是 Python ,或是其他现存的已经经过用户长时间考验的脚本语言。甚至,你可以自行设计一种脚本语言来配合你程序的特殊需要。当然,用当今最流行的 XML 是再合适不过了。
这种形式的缺点在于,稍有点编程知识的用户就可以自行修改你的脚本,因为这种情况所造成的后果是不可预知的,对软件本身使用非常不安全。
其次是聚合式。顾名思义,就是把插件功能直接写成 EXE 。主程序除了完成自己的职责外,还负责调度这些“插件”。
但是,这中模式使插件与插件之间,主程序与插件之间的信息交流困难了许多。所以也是存在一定的缺陷。
发明内容
为了克服现有的软件插件设计框架的主程序与插件之间的信息交流复杂性,以及使用安全性问题,本发明提供了一种插件式的程序设计架构,本发明所述的架构中,插件功能以动态库函数的形式存在。主程序通过接口获得插件 DLL 中的函数签名,然后在合适的地方调用它们。
通过接口技术,我们的插件需要做的只是实现程序定义的接口。主程序不需要知道插件怎样实现预定的功能,它只需要通过接口访问插件,并提供主程序相关对象的接口。这样一来,主程序与各插件之间的信息交流就变得异常简单。并且,插件对于主程序来说是完全透明的。
该架构不仅能降低主程序与插件之间信息交流的复杂度,还能保障插件在使用过程中的稳定性,不会对主程序本身带来任何安全性的影响。从而大大提升了该框架的实用性和稳定性,为应对需求蔓延所带来的程序功能变化提供了基础。
本发明对于解决这些技术问题,所采用的技术方案是:
首先,进行接口的设计。我们的程序编辑器会向插件开放正在使用的业务对象。程序启动后,就枚举每一个插件并把它连接到主程序,同时传递主程序中业务对象到接口。插件可以通过这个接口来请求主程序的业务对象或访问主程序功能 。根据上面的需求,我们首先需要一个主程序接口:IApplicationObject。
其次,进行业务对象接口的设计。这个接口是连接主程序中的业务对象和插件的一个纽带,为插件提供业务对象的操作方法和属性。接口名称:IBizObject 。这个业务对象接口根据不同的业务场景可以灵活的为对象定义方法和属性,所以没有一个统一的标准和内容,只需符合一般类方法的规则既可。
再次,根据插件在其生命周期里的行为,设计插件的接口IPlugin。此接口定义了插件生命周期中各个方法,主程序会首先调用 Connect() 方法,并传递 IApplicationObject 给插件。插件在这个过程中做一些初始化工作。然后,插件的 OnLoad() 方法被调用。在这之后,当主程序接收到调用插件的信号时(键盘、鼠标响应)就会调用插件的 Run() 方法来启动这个插件。程序结束时,调用其 OnDestory() 方法。这样,插件的生命才宣告结束。然后,为了方便管理和识别插件,还要为插件定义一个属性类:PluginInfoAttribute。可以保存它的名称 、版本及作者等信息,通过这个类修饰插件,并让它实现 IPlugin 接口。
最后,将插件式的程序设计架构引用到一个计算机软件程序中,让主程序调通过这个架构,调用编写好的插件即可。
附图说明:
图1是插件式架构的示意图
图2是本发明的类结构图
图3是本发明的工作流程图
图4是本发明实施例图之一
图5是本发明实施例图之二
图6是本发明实施例图之三
图7是本发明实施例图之四
图8是本发明在使用过程中的文件夹结构图
具体实施方式:
通过图2所示,我们先建立这个插件式架构,根据图2中所示的类结构图,建立各个类的类文件。其中包括:IPlugin 、IApplicationObject 、PluginInfoAttribute 、MyPlugin1。
在基本接口和类方法搭建完毕后,本实施例是一个文本输入的实例,主程序所要操作的业务对象为一个文档对象,所以,针对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 fileName );
void SaveFile();
void OpenFile( string fileName );
void CloseFile();
}
在这里,IBizObject被重新命名为IDocumentObject,里面提供了对文档进行操作的常用方法。
然后,编写插件功能,该插件的功能是向业务对象(文档)插入用于自定义的文字,通过让插件方法集成IPlugin接口,获取可以跟主程序交互的方法和属性,然后为插件编写具体的逻辑代码,最后封装好,存放于图8所示的插件文件夹下,等待主程序调用。
最后,在主程序中,通过代码,调用存放于插件文件夹下的插件,如图4所示。插件启动后,如图5所示。我们针对业务对象“新文件-0”,为其添加文字“1234”并单击插件中的确定按钮后,得到如图6所示的效果,可见,我们的插件通过接口,获悉操作的业务对象为“新文件-0”,并且将操作结果,作用于该文档中。然后,我们通过新建文件功能,为程序添加一个新的业务对象“新文件-1”,还是调用插件,为该文档添加文字“2222”,如图7所示,同样操作顺利完成。
Claims (7)
1.一种插件式的计算机软件设计架构,在软件功能需求发生较大改变时,可以灵活的对程序功能进行修改,而不需要重新设计程序架构,其特征是:通过定义接口IPlugin、接口IApplicationObject、类PluginInfoAttribute以及接口IBizObject四个部分,完成一个插件式的计算机软件架构。
2.根据权利要求1所述的一种插件式的计算机软件设计架构,其特征是:IPlugin接口根据插件在其生命周期里的行为,设计插件的接口IPlugin,此接口定义了插件生命周期中各个方法,主程序会首先调用 Connect() 方法,并传递 IApplicationObject 给插件,插件在这个过程中做一些初始化工作,然后,插件的 OnLoad() 方法被调用,在这之后,当主程序接收到调用插件的信号时(键盘、鼠标响应)就会调用插件的 Run() 方法来启动这个插件,程序结束时,调用其 OnDestory() 方法,这样,插件的生命才宣告结束。
3.根据权利要求1所述的一种插件式的计算机软件设计架构,其特征是:通过定义IApplicationObject接口,我们的程序编辑器会向插件开放正在使用的业务对象,程序启动后,就枚举每一个插件并把它连接到主程序,同时传递主程序中业务对象到接口,插件可以通过这个接口来请求主程序的业务对象或访问主程序功能。
4.根据权利要求1所述的一种插件式的计算机软件设计架构,其特征是:通过定义IBizObject接口,为业务对象和插件功能提供一个交互的桥梁,这个接口是连接主程序中的业务对象和插件的一个纽带,为插件提供业务对象的操作方法和属性,这个业务对象接口根据不同的业务场景可以灵活的为对象定义方法和属性,所以没有一个统一的标准和内容,只需符合一般类方法的规则既可。
5.根据权利要求1所述的一种插件式的计算机软件设计架构,其特征是:为了方便管理和识别插件,还要为插件定义一个属性类:PluginInfoAttribute,可以保存它的名称 、版本及作者等信息,通过这个类修饰插件,并让它实现 IPlugin 接口。
6.根据权利要求1所述的一种插件式的计算机软件设计架构,其特征是:通过设定一个特殊的文件夹,来存放编译好的插件文件,以供主程序调用。
7.根据权利要求1所述的一种插件式的计算机软件设计架构,其特征是:插件文件以函数类库的形式独立存在于主程序之外,主程序通过接口,与这些插件通信。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110201241 CN102890627A (zh) | 2011-07-19 | 2011-07-19 | 一种插件式的计算机程序设计架构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110201241 CN102890627A (zh) | 2011-07-19 | 2011-07-19 | 一种插件式的计算机程序设计架构 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102890627A true CN102890627A (zh) | 2013-01-23 |
Family
ID=47534136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110201241 Pending CN102890627A (zh) | 2011-07-19 | 2011-07-19 | 一种插件式的计算机程序设计架构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102890627A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761093A (zh) * | 2014-01-20 | 2014-04-30 | 深圳市佳创视讯技术股份有限公司 | 一种客户端聚合视频的方法 |
CN104850015A (zh) * | 2014-09-09 | 2015-08-19 | 北汽福田汽车股份有限公司 | 一种软件封装方法及一种汽车电子控制器 |
CN103761093B (zh) * | 2014-01-20 | 2016-11-30 | 深圳市佳创视讯技术股份有限公司 | 一种客户端聚合视频的方法 |
CN109213534A (zh) * | 2017-06-30 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 一种扩展直播软件功能的方法及装置 |
-
2011
- 2011-07-19 CN CN 201110201241 patent/CN102890627A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761093A (zh) * | 2014-01-20 | 2014-04-30 | 深圳市佳创视讯技术股份有限公司 | 一种客户端聚合视频的方法 |
CN103761093B (zh) * | 2014-01-20 | 2016-11-30 | 深圳市佳创视讯技术股份有限公司 | 一种客户端聚合视频的方法 |
CN104850015A (zh) * | 2014-09-09 | 2015-08-19 | 北汽福田汽车股份有限公司 | 一种软件封装方法及一种汽车电子控制器 |
CN104850015B (zh) * | 2014-09-09 | 2018-02-23 | 北汽福田汽车股份有限公司 | 一种软件封装方法及一种汽车电子控制器 |
CN109213534A (zh) * | 2017-06-30 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 一种扩展直播软件功能的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9916136B2 (en) | Interface infrastructure for a continuation based runtime | |
US8005788B2 (en) | System and method for legacy system component incremental migration | |
US9959098B1 (en) | Data processing systems and methods | |
Lautamäki et al. | CoRED: browser-based Collaborative Real-time Editor for Java web applications | |
US8286146B2 (en) | Method for automatic generation of schema mapping application code | |
CN102810057A (zh) | 一种记录日志的方法 | |
CN105955759A (zh) | 一种用于Web开发的模板引擎实现方法 | |
CN102890627A (zh) | 一种插件式的计算机程序设计架构 | |
Arcaini et al. | A DSL for MAPE patterns representation in self-adapting systems | |
Helvensteijn et al. | Delta modeling in practice: a Fredhopper case study | |
Barzilay et al. | Keeping it clean with syntax parameters | |
Sur | Visual Studio 2012 and. NET 4.5 Expert Development Cookbook | |
González | Java 7 concurrency cookbook | |
Willink | The micromapping model of computation; the foundation for optimized execution of eclipse qvtc/qvtr/umlx | |
KR100985192B1 (ko) | 소프트웨어 개발 시스템 | |
Vranić et al. | A configurable use case modeling metamodel with superimposed variants | |
Späth | Learn Kotlin for Android Development | |
Taylor | Software architecture and design | |
Bilgin | Hands-on Mobile Development with. NET Core: Build Cross-platform Mobile Applications with Xamarin, Visual Studio 2019, and. NET Core 3 | |
Li et al. | A lightweight approach to transparent sharing of familiar single-user editors | |
EP2171578A1 (en) | Programming model for modular development | |
González | Java 9 concurrency cookbook | |
Mittelbach et al. | LATEX Tagged PDF Feasibility Evaluation | |
Yang et al. | Mapping Approach for Model Transformation of MDA Based on XMI/XML Platform | |
Dewan | Increasing the automation of a toolkit without reducing its abstraction and user-interface flexibility |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130123 |