热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

平台+插件软件设计思想及基于COM的原型实现

引言:我们已经习惯于一个人独立进行软件开发,每个人都使用自己的风格进行程序设计,但随着工程项目变大或者是对时间要求比较紧时,就需要几个人,十几个人,甚至是上百个人协作进行软件开发与

    引言:我们已经习惯于一个人独立进行软件开发,每个人都使用自己的风格进行程序设计,但随着工程项目变大或者是对时间要求比较紧时,就需要几个人,十几个人,甚至是上百个人协作进行软件开发与设计,这时一个比较棘手的问题就是如何将若干人所编写的软件代码(有可能是链接库、组件)进行无缝地集成,纵然进行源代码集成是个比较传统也比较成熟的方式,适当使用链接库或组件,也可减少源代码的泄露,但经常的情况是每一次的程序集成和代码维护都需要重新编译与链接源代码和重新发布新软件,这种工作有时又是非常麻烦的。那么就有疑问产生,能不能有一种方法将需要开发的目标软件分为若干功能部件,各部件之间遵循着标准接口规定,这样在各个部件按要求开发之后,在进行整个软件集成时只是将需要的部件进行组装,而不是集成各源代码或链接库进行编译与链接,需要新的功能组件时也是按规定开发,之后只进行组装软件就可以使用,这就是使用一种二进制的软件集成方法。答案是肯定,这就是平台+插件的软件设计方法。
一、已有的软件系统(平台+插件)介绍与插件分类
   现在就来看一看所有软件系统的根——操作系统(OS)。操作系统是系统软件,是计算机不可缺少的关键软件,只有安装有操作系统的计算机才能为人所用,才能变为真正计算工具。操作系统除完成其基本功能以外,还为软件开发人员提供了应用程序开发接口(API),软件开发人员使用API进行软件设计与代码编写,程序调试编译以后,安装在所依托的操作系统之后,用户开发的软件(可分为工具软件和应用软件)就可以正常运行。而这时并不需要对操作系统进行修改,也不需要重新编译和链接操作系统,对于用户软件来说,操作系统是完全透明的。操作系统与用户软件是一个极好的平台+插件实例。
   除操作系统之外,在用户软件方面也有许多这种平台+插件的软件系统实例,其中大名鼎鼎的就是Adobe公司的PHOTOSHOP图形处理软件。PHOTOSHOP除其图形处理功能卓越以外,还有一项给开发人员印象较深的就是其插件(Plug-in)功能。为了提高图形的处理功能PHOTOSHOP提供了标准插件开发接口,这样第三方软件开发商就可以按标准插件接口开发独具特色的图形功能扩展,开发的插件安装后,系统即可使用,而不影响主程序和其它插件,通过此种方法PHOTOSHOP扩展了成千上万的滤镜(Filter)功能插件。除PHOTOSHOP外,使用插件技术的软件还有IE,Netscape,Macromedia公司的系列软件,以及Microsoft的Visual Studio开发工具及Office办公软件等。各用户软件领域所应用的插件技术可分为三种类型:
   1、类似批命令的简单插件(文本插件)。事实上这种插件的自由度非常低。使用这种方法的软件有Win Hacker等,运行这种插件后,会一步步要求用户进行选择/输入,最后根据用户的输入来执行一系列事先定义好的操作。这种插件一般是文本文件。功能比较单一,可扩展性极小。优点是插件做起来非常方便,即使是对程序设计了解不多的人也可以制作。如WinAmp的Skin。
   2、使用一种特殊的脚本语言来实现的插件(脚本插件)。这种插件比较难写,需要软件开发者自己制作一个程序解释内核。比如微软惹了很多麻烦的宏就是这种类型的。Microsoft Office就提供了开发者用于扩展辅助功能的内置Vbscript(VBA)。这种方法的优点在于无需使用其它工具来制作插件,软件本身就可以实现,普遍出现于各种办公自动化软件中。
   3、利用已有的程序开发环境来制作插件(程序插件)。例如PhotoShop等软件使用的方法。使用这种方法的软件在程序主体中建立了多个自定义的接口,使插件能够自由访问程序中的各种资源。这种插件的优势在于自由度极大,可以无限发挥插件开发者的创意,这种插件是狭义范围的插件,也是真正意义上的插件。而这种插件机制的编写相对复杂,对于插件接口之间的协调比较困难,插件的开发也需要专业的程序员才能进行。
   本文主要讨论的是第3种类型插件,即利用已有程序开发环境制作的程序插件。
二、平台+插件软件设计基本思想
   插件的本质在于不修改程序主体(平台)的情况下对软件功能进行扩展与加强,当插件的接口公开后,任何公司或个人都可以制作自己的插件来解决一些操作上的不便或增加新的功能,也就是实现真正意义上的“即插即用”软件开发。平台+插件软件结构是将一个待开发的目标软件分为两部分,一部分为程序的主体或主框架,可定义为平台,另一部分为功能扩展或补充模块,可定义为插件。

http://www.gaodaima.com/?p=65429平台+插件软件设计思想及基于COM的原型实现

   在进行软件开发之前,是否采用平台+插件结构进行软件开发,还要依据具体的软件需求情况进行确定,但一般来讲,使用平台+插件结构进行软件设计会给所开发软件增加新的生命力。当确定平台+插件的软件结构之后,就要分析哪些部分功能由主体完成,即平台的基本功能,哪些部分功能由插件完成,即需要扩展的插件功能。平台所完成的功能应为一个软件系统的核心和基础,这些基本功能即可为用户使用,也可为插件使用,就是又可以把平台基本功能分为两个部分,内核功能和插件处理功能。平台的内核功能是整个软件的重要功能,一个软件的大部分功能因由内核功能完成。平台的插件处理功能用于扩展平台和管理插件,为插件操纵平台和与插件通信提供标准平台扩展接口。插件所完成的功能是对平台功能的扩展与补充,一般插件完成系列化功能,例如:PHOTOSHOP的滤镜插件完成对图形的特殊效果处理,这些功能都有一些共性,可以进行集中管理,并且是可以定义出标准的插件接口。
   为了实现平台+插件结构的软件设计需要定义两个标准接口,一个为由平台所实现的平台扩展接口,一个为插件所实现的插件接口。这里需要说明的是:平台扩展接口完全由平台实现,插件只是调用和使用,插件接口完全由插件实现,平台也只是调用和使用。平台扩展接口实现插件向平台方向的单向通信,插件通过平台扩展接口可获取主框架的各种资源和数据,可包括各种系统句柄,程序内部数据以及内存分配等。插件接口为平台向插件方向的单向通信,平台通过插件接口调用插件所实现的功能,读取插件处理数据等。
   平台插件处理功能包括插件注册、管理和调用,以及平台扩展接口的功能实现。插件注册为按照某种机制首先在系统中搜索已安装插件,之后将搜索到的插件注册到平台上,并在平台上生成相应的调用机制,这包括菜单选项、工具栏、内部调用等。插件管理完成插件与平台的协调,为各插件在平台上生成管理信息以及进行插件的状态跟踪。插件调用为调用各插件所实现的功能。平台插件处理功能实现的另一部分功能为平台扩展接口的具体实现。
   平台+插件软件设计步骤包括:
1、 确定平台基本功能和插件要完成系列化功能或扩展功能;
2、 定义平台扩展接口和插件接口;
3、 完成平台设计,主要是平台插件处理功能;
4、 向插件开发者提供主平台程序(执行代码),公布平台扩展接口和插件要实现的接口,可能包括开发用的SDK;
5、 插件开发者按要求开发插件,实现插件接口,开发者可使用提供的主平台程序测试插件;
6、 主平台设计者继续完成主平台的内核功能,并可随时公布新增加主平台扩展接口和插件接口;
7、 实现4-6步骤的良性循环,整个软件系统不断向前进化。
   平台+插件软件设计的优点:
1、 实现真正意义上的软件组件的“即插即用”;
2、 在二进制级上集成软件,减少大量的软件重新编译与发布麻烦与时间;
3、 能够很好实现软件模块的分工开发,能够大量吸取他人的优长;
4、 可较好实现代码隐藏,保护知识产权。
三、基于COM的原型实现
   平台+插件软件的目标及设计思路已经明确,那么用什么样的方法和技术实现插件(程序插件),从目前已有这方面软件的设计方法来看(Windows系统上的软件),一种是使用传统DLL方法的实现,一种是使用COM方法的实现。下面就以COM技术为基础,实现一个基本的原型框架设计。COM技术的原理大家都已经相当熟悉,本文为了实现平台+插件的几方面功能,相应地采用COM的相关方面技术与方法来介绍有关实现要点。整个原型系统开发环境:Windows 2000、Visual C++ 7.0,使用的开发库包括MFC和ATL。
   插件注册   为了管理插件首先是设计一种插件的注册机制,通过此种机制平台可以搜索到系统中所有的可用插件,并在平台上生成各插件的调用点。注册就需要为每插件设置一个特殊标识,有了这个标识的插件,平台就可以使用。使用COM实现注册机制有一种非常好的方法,这就是组件目录(Component Category)。组件目录也是COM实现的标准接口(Interface,不同于平台+插件中所说的接口)。在设计COM组件时,只为其定义一个目录分类信息即可,之后就可使用标准的组件目录接口在系统中搜索特定类型的组件,插件注册与标识就可轻松地解决了。
    插件管理与调用  由组件目录获得特定标识的组件后,就需要为每个插件生成管理机制,每个插件都有一个类ID(CLSID),在平台中为每个插件生成一个类ID数组,每个插件的每一个可调用功能均生成一个菜单项(动态生成菜单项)。对每个插件是否激活,平台都有相应的记录信息。插件调用可通过菜单消息循环或内部调用实现。
   平台扩展接口和插件接口  这两个接口不同于COM技术中的接口,但平台扩展接口和插件接口可使用COM技术的接口定义实现。在原型系统的实现上平台扩展接口定义了一个IServer接口,插件接口定义了一个IPlugin接口。IServer接口用于为插件传递内部数据接口,IPlugin接口用于读取插件功能信息,并且还用于传递平台消息与资源句柄。
    消息、资源与数据传递  平台与插件之间需要进行大量的消息与数据交互,其中包括:各种Windows消息、各种Windows资源句柄,以及系统使用的各种内部数据,有时还可能需要分配内存。所有的消息与数据交互均由平台扩展接口和插件接口所定义的标准方法实现,在原型系统中已经实现了鼠标消息、窗口句柄、设备句柄和程序内部定义数据结构的传递。

    结    论:原型系统已实现一种通用的平台+插件软件开发的框架模式,通过实践证明这种思路和设计方法可行,可以应用到我们的具体软件开发上。通过这种方式可以很好地解决软件合作开发与集成问题,对有版本级别的软件开发更为有用。高级版的软件安装有高级版的插件,低级版的软件不安装高级版的插件,这就给程序分发和开发带来极大的便利。对于有系列化功能的软件,系列化功能由插件实现。

欢迎大家阅读《平台+插件软件设计思想及基于COM的原型实现》,跪求各位点评,若觉得好的话请收藏本文,by



推荐阅读
  • VSCode快速查看函数定义和代码追踪方法详解
    本文详细介绍了在VSCode中快速查看函数定义和代码追踪的方法,包括跳转到定义位置的三种方式和返回跳转前的位置的快捷键。同时,还介绍了代码追踪插件的使用以及对符号跳转的不足之处。文章指出,直接跳转到定义和实现的位置对于程序员来说非常重要,但需要语言本身的支持。以TypeScript为例,按下F12即可跳转到函数的定义处。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
author-avatar
爱走了我来了two_537
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有