说起插件(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,控件开发总结的那个系列停在那里好久了,汗一个,有空就尽快补上吧。这个系列也先开个头吧,不然又会被自己找各种借口扼杀了。
本文转自纶巾客博客园博客,原文链接:http://www.cnblogs.com/guanjinke/archive/2007/02/13/649805.html,如需转载请自行联系原作者

构建插件式的应用程序框架(一)----开篇相关推荐

  1. 构建插件式的应用程序框架(六)----通讯机制(ZT)

    前天发了构建插件式的应用程序框架(五)----管理插件这篇文章,有几个朋友在回复中希望了解插件之间是如何通讯的.这个系列的文章写到这里,也该谈谈这个问题了,毕竟已经有了插件管理.不知道大家有没有注意到 ...

  2. 构建插件式的应用程序框架(四)----服务容器

    在构建插件式的应用程序框架(二)----订立契约一文中,可以看到我们的IApplication接口是派生于IServiceContainer接口的.为什么要派生于IServiceContainer呢? ...

  3. 构建插件式的应用程序框架(八)----视图服务的简单实现(ZT)

    我在前一篇文章里提到,对于停靠工具栏或者是视图最好是不要将实例放到词典中,而是将工具栏或者视图的类型放到词典中,因为视图类型会经常的被重用,并且会经常被关闭或者再打开.当实例被关闭后,资源就被释放了, ...

  4. 用于构建集成式桌面应用程序的新指南和新工具(转载于MSDN)

    发布日期: 2006-10-30 | 更新日期: 2006-10-30 Christian Thilmany 和 Jim Keane 本文将介绍以下内容: • CAB 和 Smart Client S ...

  5. .net 插件式开发学习总结

    .NET简谈插件系统开发模式 今天跟大家分享一下我们在日常开发中并不常用的开发模式"插件系统模式",什么叫插件从大一点的概念讲就是我们开发的软件是由很小的模块组成,每一块都能成功的 ...

  6. 插件式架构设计实践:插件式系统架构设计简介

    本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework(MEF),以插件式架构设计为导线,分享本人在从事基于微软S ...

  7. springboot 前缀_springboot插件式开发框架

    springboot插件式开发框架 介绍 该框架主要是集成于springboot项目,用于开发插件式应用的集成框架. 核心功能 插件配置式插拔于springboot项目. 在springboot上可以 ...

  8. Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架

    Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序框架 发现 Seam 对 JSF 生命周期特有的增强 文档选项 未显示需要 JavaScript 的文档选项 打印本页 将 ...

  9. 9. Zigbee应用程序框架开发指南 - 属性管理

    1 Zigbee应用程序框架开发指南 - 概述 2 Zigbee应用程序框架开发指南 - 应用程序框架结构 3 Zigbee应用程序框架开发指南 - 应用程序框架目录结构 4 Zigbee应用程序框架 ...

最新文章

  1. 不出现用户帐户控制-让Win7的用户账户控制(UAC)放过信任的程序
  2. libuv / 编译 libuv 1.30 过程说明(静态库)
  3. Linux显示5 9行的数据,Linux复习
  4. php微信小程序多图上传,tp5实现微信小程序多图片上传到服务器功能
  5. [中文事件抽取]DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Lab
  6. 怎么安装python环境和编译器_Python环境安装以及PyCharm编译器的安装
  7. 简易计算机系统综合设计设计报告(VHDL)
  8. Excel 10个高级办公技巧
  9. 微星z370安装linux系统,微星Z370-A PRO主板u盘装系统win10教程
  10. rsync udr——远程大文件传输加速
  11. 2022年上半年5月网络工程师试题及答案
  12. Verilog-半加器(简单组合逻辑)
  13. zabbix监控用户密码剩余过期天数
  14. 路由器默认账户密码大全
  15. (OK) MIMP - 17 ( 5 nodes) - 抓包-缺少 MPTCP-JION - 节点1:服务器 mptcp-kmsg-server.txt
  16. 如何将视频分割成几部分 视频剪切软件哪个好
  17. 英语专业 计算机研究生就业,计算机会计英语专业毕业生太多 就业压力倍增
  18. [stm32] 一个简单的stm32vet6驱动的天马4线SPI-1.77寸LCD彩屏DEMO
  19. 快速幂函数的递归写法
  20. 数据结构——多项式的加减乘法以及合并同类项的算法

热门文章

  1. Java中对List集合排序的两种方法
  2. 动与静--软件的雕塑艺术
  3. WSE2.0中X509安全令牌的使用
  4. 大数据之-Hadoop3.x_MapReduce_切片源码总结---大数据之hadoop3.x工作笔记0105
  5. python_海龟绘图_坐标系问题_画笔各种方法---python工作笔记013
  6. AndroidStudio安卓原生开发_UI高级_DrawerLayout_侧滑菜单控件---Android原生开发工作笔记120
  7. axios_的默认配置_使用演示---axios工作笔记008
  8. 持续集成部署Jenkins工作笔记0001---持续集成、持续部署、持续交付的概念
  9. SpringCloud工作笔记103---Mybatis-plus使用注解 @TableField(exist = false) 注明非数据库字段属性
  10. STM32工作笔记0084---UCOSIII软件定时器