学习插件架构(一)

许文君 2013-08-19 05:15:05
加精
原文地址: http://blog.csdn.net/xuddk727/article/details/10076409

写在开头:

曾遇到过好几回网友询问,插件到底是如何实现的?于是萌发了以自己学习架构的过程中所学习到的知识点写个系列的文章,让不熟悉的网友对概念与实现有个简单的了解,同时也是给自己一个锻炼文笔、整理知识以及接受大家指正的机会。限于自己水平,文章难免有不少错误,欢迎大牛以及各路人马指正。




由于业务需求不同,架构千差万别,本文作者工作属于遥感方向,因此,架构限定在无server桌面端exe应用,希望本文对其他行业的朋友也能有所帮助。

插件的定义和优缺点我就不再赘述了,相信大家都知道,如果不明白的可以看下灿哥的文章:http://blog.csdn.net/clever101/article/details/5879539

最初的插件架构来源于dll动态加载,比如我写了一个dll,规定这个dll必须导出两个特定的函数,GetName 和 GetMethod, GetName 用于获得这个dll内容的名称,GetMethod用于执行相应的代码,这样exe运行之后,通过查找特定目录下面的dll,这样就能把所有dll插件加载进来。然后通过动态调用,就能实现扩展。简而言之,exe相当于一个空框架,所有执行的都在dll内,exe通过指定的方法加载这些dll并执行相应的工作。当然,在这种架构发展的过程中也有许多小插曲,我们有空不妨当故事看:

这种方案在最初运行的很完美,随着时间推移,问题逐渐出来了。当A定制了这套策略,然后某天B接手了,他觉得某些功能需求在这套架构下不能满足需求了,于是他修改了接口,GetName传递了多个名称,GetMethod可以接受参数,于是,一打包,发布。客户电话反馈,XXX,我们以前的功能模块怎么用不起来了啊,我们原来的exe怎么也用不了了啊?啊,客户想兼容原有的功能,这可怎么办才好,得改代码重新编译了。。要是两者依赖的第三方库不同怎么办呢?要是两者系统库不同怎么办呢?。。。。 这大致就是原来dll hell的故事,微软后来嵌入了manifest大概也是为了解决这个问题吧(未求证)。




文本插件工程示例程序源代码在这:http://download.csdn.net/detail/xuddk727/5975283 。欢迎大家拍砖。

措辞若有不当,请见谅。
...全文
5258 117 打赏 收藏 转发到动态 举报
写回复
用AI写文章
117 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkj66278006 2014-11-07
  • 打赏
  • 举报
回复
插件式个号东西
itachi777 2013-12-08
  • 打赏
  • 举报
回复
shuzhongxunyu 2013-11-30
  • 打赏
  • 举报
回复
好好学习下。。。。
itachi777 2013-11-17
  • 打赏
  • 举报
回复
学习了,谢谢
j252234234 2013-08-30
  • 打赏
  • 举报
回复
不错~~~~~~
littleivan 2013-08-29
  • 打赏
  • 举报
回复
NPCHard 2013-08-28
  • 打赏
  • 举报
回复
楼主 不管怎么样 你要坚持写完!我顶你
西瓜要 2013-08-28
  • 打赏
  • 举报
回复
学习下。。。
xiaocongzhi 2013-08-28
  • 打赏
  • 举报
回复
插件学习者前来关注
jyl123321123 2013-08-28
  • 打赏
  • 举报
回复
不错啊 !!
metadeth 2013-08-28
  • 打赏
  • 举报
回复
好东西,学习了
静静abc 2013-08-27
  • 打赏
  • 举报
回复
真的好。。。。。。。。。。。
静静abc 2013-08-27
  • 打赏
  • 举报
回复
好。。。。。。。。。。。。。。。。。。。
SKINSE界面库 2013-08-27
  • 打赏
  • 举报
回复
插件模式应该是目前互联网产品中应用非常钢钒的一个设计模式了
wxf041041 2013-08-27
  • 打赏
  • 举报
回复
多谢楼主的分享!顶一下!对COM感兴趣!
去旅行吧 2013-08-26
  • 打赏
  • 举报
回复
谢谢楼主 ! 来学习的
Delta 2013-08-25
  • 打赏
  • 举报
回复
前排支持,学习下。。
Ronaldo9999 2013-08-24
  • 打赏
  • 举报
回复
目前正在做这方面的尝试 谢谢你的分享
zhouzegao123 2013-08-24
  • 打赏
  • 举报
回复
太棒了,lz。。。
woshizhaoxuhui 2013-08-23
  • 打赏
  • 举报
回复
学习了!!!!!!
加载更多回复(62)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧