学习插件架构(一)

写在开头:

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



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

       插件的定义和优缺点我就不再赘述了,相信大家都知道,如果不明白的可以看下灿哥的文章:插件架构简介 

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

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

    


      文本插件工程示例程序源代码在这: 最简单的插件框架示例 。欢迎大家拍砖。


       措辞若有不当,请见谅。

       

          

      

猜你喜欢

转载自blog.csdn.net/xuddk727/article/details/10076409