惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

博客园 - 纶巾客

Redis数据类型 Solr的Scala客户端(scalikesolr)介绍 使用Solr构建企业级的全文检索(四)---------写入文档 使用Solr构建企业级的全文检索(三)---------Schema定义 使用Solr构建企业级的全文检索(二)---------管理界面简介 使用Solr构建企业级的全文检索(一)---------开篇 再次提笔 构建插件式的应用程序框架(八)----视图服务的简单实现 WinForm控件开发总结(十二)-----让控件处理导航键 构建插件式的应用程序框架(七)----基本服务 构建插件式的应用程序框架(六)----通讯机制 构建插件式的应用程序框架目录 WinForm控件开发总结目录 构建插件式的应用程序框架(五)----管理插件 构建插件式的应用程序框架(四)----服务容器 构建插件式的应用程序框架(三)----动态加载 构建插件式的应用程序框架(二)----订立契约 WinForm控件开发总结(十一)-----调试控件的设计时行为 制作VS风格的Toolbox控件
构建插件式的应用程序框架(一)----开篇
纶巾客 · 2007-02-13 · via 博客园 - 纶巾客

      说起插件(plugin)式的应用程序大家应该不陌生吧,记得很早以前有一款很流行的MP3播放软件winmap,它是我记忆里最早认识的一款使用插件模式的应用程序,你可以使用他的插件管理器插入很多的音乐效果器,皮肤,甚至是歌词显示的面板。接下来看到了Photoshop使用插件模式管理虑镜。最后发现只要是大一点的应用程序基本都使用了插件式的程序框架,就拿我们最常用的工具来说吧,Visual StudioOfficeDelphiEclipse等等。Eclipse将插件模式发挥到了及至,因为他是开源的的,所以众多的爱好者,开发出了让人应接不暇的插件。
       为什么使用插件式的应用程序框架呢?我的答案就是他为应用程序的功能扩展提供的无限的想象空间。一个应用程序,无论你前期做了多少的市场调查,需求分析做的多么完美,你也只是迎合一部分人的期望,更甚,你只迎合了一部分人的一部分期望,或者一部分人在某一时间的一部分期望。所以当程序发布以后,你依然有机会提供新的功能而不必重新发布程序,人们也可以根据自己的需要来开发新的功能来满足自己的需求,据我所知有很多的软件公司就是专门开发插件来赚钱,真是一举多得,何乐而不为呢?
       我们来看一些常见的提供插件模式的应用程序是如何实现插件功能的。据我的使用经验来看,Visual StudioOffice其实都是自动化程序,通过COM的方式提供了一组接口。开发人员可以利用这些接口来开发基于COM的插件,当插件开发完成后,注册COM组件。在Visual Studio中你可以使用Addin管理器来选择是否启用插件,而Office似乎省去了这一步,一旦你注册了Office插件,Office应用程序在启动的时候会自动加载插件。COM方式似乎最受微软的宠爱,因为COM是一种二进制重用标准,用户可以使用大部分流行的语言来开发插件。当然你也可以使用别的方式,比如普通DLL,只是这样对于开发人员来说适用面就窄了,因为各个厂商DLL的内部结构是不尽相同的,比VC开发出的DLLBorland C++builder开发出的DLL结构就不同,需要专门的工具进行转换。现在,还有另外一种方式,使用dotNetAssembly,使用dotNet的好处是开发简单,使用也同样简单(不需要注册),而且你也可用通过COM互操作让开发人员可以使用各种语言进行插件开发,当然用dotNet开发还是最简单的,省去不少中间过程。
         其实上面介绍的三种方式开发的插件最终还是寄宿在DLL中,从中我们就可以看出一些端倪。为什么使用DLL呢?DLL虽然也是PE格式,但是他是不能独立运行的,一般情况下,都是在运行时加载到应用程序的内存空间。插件模式正好是利用了这一点,插件不是应用程序的一部分,他以二进制的方式独立存在,由用户决定是否使用他。
      那么插件是如何与应用程序进行交互的呢?首先必须有一个契约,应用程序要声明我有哪些功能是可以被插件使用的,并且具备什么条件才能成为我的插件。其次,应用程序不依赖于插件,也就是说,没有你插件,我也可以很好的运行。再次,应用程序必须有一种策略来获取插件存在的位置,比如Visual studio是通过注册表的方式。最后,应用程序可以通过某种方式动态的加载插件。
      最近工作比较忙,没有时间写Blog,控件开发总结的那个系列停在那里好久了,汗一个,有空就尽快补上吧。这个系列也先开个头吧,不然又会被自己找各种借口扼杀了。