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

简介:
     说起插件( 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,如需转载请自行联系原作者
目录
相关文章
|
机器学习/深度学习 并行计算 异构计算
NVIDIA CUDA/cuDNN历代版本下载地址
NVIDIA CUDA/cuDNN历代版本下载地址
4729 0
NVIDIA CUDA/cuDNN历代版本下载地址
|
数据采集 供应链 搜索推荐
数据集成:融合不同来源的数据
【6月更文挑战第4天】数据集成在企业中发挥关键作用,连接数据孤岛,促进信息流动,提升决策能力。通过抽取、清洗、转换和加载(ETL)不同来源、格式的数据,整合到统一框架,进行深度分析。以零售商为例,集成销售、客户和供应链数据可优化库存管理。数据清洗确保质量,转换满足分析需求,最终加载到数据仓库。Python和pandas库是实现这一过程的工具之一。随着技术进步,数据集成将推动企业向智能化和个性化发展。
346 2
|
算法 安全
数据脱敏?看我一行注解搞定!
本文主要分享什么是数据脱敏,如何优雅的在项目中运用一个注解实现数据脱敏,为项目进行赋能。希望能给你们带来帮助。
1296 3
|
Ubuntu
简单几步实现Ubuntu22.04启用Nvidia显卡
本文是关于如何在Ubuntu 22.04操作系统上启用Nvidia显卡的教程,包括禁用旧驱动、添加新驱动源、安装推荐驱动、重启系统以及通过Nvidia设置更改为高性能模式的步骤。
3287 0
简单几步实现Ubuntu22.04启用Nvidia显卡
|
SQL 分布式计算 资源调度
常用大数据组件的Web端口号总结
这是关于常用大数据组件Web端口号的总结。通过虚拟机名+端口号可访问各组件服务:Hadoop HDFS的9870,YARN的ResourceManager的8088和JobHistoryServer的19888,Zeppelin的8000,HBase的10610,Hive的10002。ZooKeeper的端口包括客户端连接的2181,服务器间通信的2888以及选举通信的3888。
498 2
常用大数据组件的Web端口号总结
|
供应链 监控 数据安全/隐私保护
ERP系统中的供应链风险管理与应对策略解析
【7月更文挑战第25天】 ERP系统中的供应链风险管理与应对策略解析
1041 0
|
SQL 分布式计算 大数据
面经:Impala实时查询引擎原理与性能调优
【4月更文挑战第11天】Apache Impala是高性能的大数据查询引擎,常在面试中被关注。本文分享了Impala的面试重点:架构(Catalog Service、Statestore、Impalad)、查询流程、SQL特性、性能调优及与其他引擎的对比。理解其工作原理、SQL使用和调优策略,对于面试和实际工作都至关重要。通过示例和知识点详解,助你提升对Impala的掌握,自信应对技术考察。
693 3
|
JavaScript 小程序
VUE3(三十五)vite构建的项目配置使用.env文件
VUE3(三十五)vite构建的项目配置使用.env文件如标题所示:我要在vue3项目使用.env文件。 先介绍一下项目背景,项目使用VUE3.2 + vite2.9 + typescript搭建。 我基本断定,vue3使用.env文件的方法可能和vue2使用.env文件的方法可能是不同,关于vue2项目如何使用.env文件,请移步《VUE2(七)VUE配置env文件使用》
648 1
|
网络协议 安全 Unix
【玩转RT-Thread】RT-Thread网络框架:BSD网络接口&SAL套接字抽象层
【玩转RT-Thread】RT-Thread网络框架:BSD网络接口&SAL套接字抽象层
1091 0
|
消息中间件 NoSQL Java
Redis实现延迟队列,我研究了两种方案,发现并不简单
前段时间有个小项目需要使用延迟任务,谈到延迟任务,我脑子第一时间一闪而过的就是使用消息队列来做,比如RabbitMQ的死信队列又或者RocketMQ的延迟队列,但是奈何这是一个小项目,并没有引入MQ,我也不太想因为一个延迟任务就引入MQ,增加系统复杂度,所以这个方案直接就被pass了。