说起插件(plug-in)式的应用程序大家应该不陌生吧,记得很早以前有一款很流行的MP3播放软件winmap,它是我记忆里最早认识的一款使用插件模式的应用程序,你可以使用他的插件管理器插入很多的音乐效果器,皮肤,甚至是歌词显示的面板。接下来看到了Photoshop使用插件模式管理虑镜。最后发现只要是大一点的应用程序基本都使用了插件式的程序框架,就拿我们最常用的工具来说吧,Visual Studio,Office,Delphi,Eclipse等等。Eclipse将插件模式发挥到了及至,因为他是开源的的,所以众多的爱好者,开发出了让人应接不暇的插件。
为什么使用插件式的应用程序框架呢?我的答案就是他为应用程序的功能扩展提供的无限的想象空间。一个应用程序,无论你前期做了多少的市场调查,需求分析做的多么完美,你也只是迎合一部分人的期望,更甚,你只迎合了一部分人的一部分期望,或者一部分人在某一时间的一部分期望。所以当程序发布以后,你依然有机会提供新的功能而不必重新发布程序,人们也可以根据自己的需要来开发新的功能来满足自己的需求,据我所知有很多的软件公司就是专门开发插件来赚钱,真是一举多得,何乐而不为呢?
我们来看一些常见的提供插件模式的应用程序是如何实现插件功能的。据我的使用经验来看,Visual Studio和Office其实都是自动化程序,通过COM的方式提供了一组接口。开发人员可以利用这些接口来开发基于COM的插件,当插件开发完成后,注册COM组件。在Visual Studio中你可以使用Add-in管理器来选择是否启用插件,而Office似乎省去了这一步,一旦你注册了Office插件,Office应用程序在启动的时候会自动加载插件。COM方式似乎最受微软的宠爱,因为COM是一种二进制重用标准,用户可以使用大部分流行的语言来开发插件。当然你也可以使用别的方式,比如普通DLL,只是这样对于开发人员来说适用面就窄了,因为各个厂商DLL的内部结构是不尽相同的,比VC开发出的DLL和Borland C++builder开发出的DLL结构就不同,需要专门的工具进行转换。现在,还有另外一种方式,使用dotNet的Assembly,使用dotNet的好处是开发简单,使用也同样简单(不需要注册),而且你也可用通过COM互操作让开发人员可以使用各种语言进行插件开发,当然用dotNet开发还是最简单的,省去不少中间过程。
其实上面介绍的三种方式开发的插件最终还是寄宿在DLL中,从中我们就可以看出一些端倪。为什么使用DLL呢?DLL虽然也是PE格式,但是他是不能独立运行的,一般情况下,都是在运行时加载到应用程序的内存空间。插件模式正好是利用了这一点,插件不是应用程序的一部分,他以二进制的方式独立存在,由用户决定是否使用他。
那么插件是如何与应用程序进行交互的呢?首先必须有一个契约,应用程序要声明我有哪些功能是可以被插件使用的,并且具备什么条件才能成为我的插件。其次,应用程序不依赖于插件,也就是说,没有你插件,我也可以很好的运行。再次,应用程序必须有一种策略来获取插件存在的位置,比如Visual studio是通过注册表的方式。最后,应用程序可以通过某种方式动态的加载插件。
最近工作比较忙,没有时间写Blog,控件开发总结的那个系列停在那里好久了,汗一个,有空就尽快补上吧。这个系列也先开个头吧,不然又会被自己找各种借口扼杀了。
分享到:
相关推荐
第01天(14集)---002.开篇-程序员的玄学与佛学.mp4---003.开篇-程序员的玄学与佛学.mp4---004....第02章-使用Maven构建应用-第一个Maven应用程序.mp4第02天(5集)---015.第03章-三层架构+MVC-什么是三层架构.mp4---0
WinForm界面开发之酒店管理系统--开篇.pdf
01-提交版-开篇-书籍a课程介绍.pdf
【课程思政案例】网络综合应用——PHP开篇--合作共赢.pdf
PCB设计的十大误区-开篇引言pdf,先哲告诉我们,道法器术,学习要从道理和方法开始。现在社会是快餐型的学习方式,互联网时代,从来都不缺资料,缺的是一颗沉下来慢慢学习的心。“高速先生”一直以来坚持用简单浅显的...
引言作为开篇部分,我们将探讨关于本次图神经网络组队学习的几个问题:首先我们将讨论为什么我们要关注图深度学习?具体地,为什么我们要把现实世界的数据表示成图,为什么
此文档为本人专栏文档附件,对应每一篇文章,请大家多多指教 此文档为本人专栏文档附件,对应每一篇文章,请大家多多指教
PHP程序设计基础第1章-PHP开篇.pptx
一千个人眼中有一千个哈姆雷特,研发效能到底是什么?每个人的理解各不相同。怎么去快速提升它?往往又束手无策。本次课程,将基于众多阿里团队的实践,定义研发效能,围绕影响研发效能的三个核心问题,分享效能提升...
第一,我会从身边经常见到的事情出发,用故事来讲解各种网络协议,然后慢慢扩展到不熟悉的领域 第二,我会用贴近场景的方式来讲解网络协议,将各个层次的关系串起来,而非
Thu 02 April 2015 Tags iOS (http://casatwy.com/tag/ios.html) / architect (http:/
。
开篇创建一个小程序项目并解析体验,介绍如何由零开始创建一个小程序,全面体验小程序的开发工具、界面、开发框架、实现过程及其主要代码框架,了解小程序的应用场景及开发要求。接着介绍小程序开发基础,包括小程序...
企业架构_-_开篇:TOGAF介绍
简单易学的A13-Spring开篇、配置文件,能让初学者更好更快的掌握Spring的运用
企业架构_-_开篇:TOGAF介绍.zip
推荐系统三十六式-01.开篇词用知识去对抗技术不平等.pdf
在《年度总结和计划:去年4个1,今年5个1》中说过今年我准备在项目组引入一个架构方TOGAF。工业和信息化部副部长杨学山在一次内部座谈时提到:与西方发达国家比,国内的信息化建设在硬件方面已经不相上下,在软件...