C\S结构的插件式开发思想以及向B\S结构的架构延伸(一)

    长夜漫漫、无心睡眠!不断地在想,各大软件企业、各个开发团队、各种各样的项目都在根据自己的现实情况不断地在尝试各种各样的开发模式、思想、以及管理,但是每个团队中都会存在各种各样的难题,这样的现实也说明了,要做到一个IT企业的长远、合理、有效的规划是多么的艰难。所以各个团队就不断地学习各种管理技术各种先进的开发模式以适应瞬息万变的“挨踢”界,都向着同一个目标“在限定的时间内给客户提供高质量的软件产品”进发。前面有感而发,有点说大了,在接下来的一段时期里将跟大家一起探讨一个比较值得学习的开发思想,以及从这个开发思想延伸出来的能够用到实际项目中的一些有效的方法,探讨的内容就是从C\S结构插件式开发向B\S结构延伸。
    插件式开发风靡各个软件项目已经许久,他的可靠性高、重用性高、耦合度小、低维护成本等都一直深受广大架构师以及程序员的喜爱,插件式开发也是从面向过程的编程转向面向对象编程的产物,插件式开发的著名产品可谓遍布全球,如:OFFICE、Visual Studio一系列产品、AUTODESK等知名产品都采用的该思想进行产品的研发以及规划,甚至更可怕的是AUTODESK如今的产品能够做到产品向上兼容,也就是低版本的程序能够兼容高版本的程序,虽然他们的内核我们不得而知,但是可以肯定的是这跟他们的产品的良好的规划分不开。在开源界也有很多著名的插件式开发的项目,其中最著名的就是SharpDevelop ,他是一个用于制作C#或者VB.NET的项目而设计的一个编辑器,同时,这个编辑器本身就是使用C#开发的,而且公开了全部源代码,因此这个工具本身也是学习C#以及软件开发规范的一个很好材料。通俗点讲,就是用C#和VB写了一个VS平台(包含解析器和编译器等所有模块,牛X),接下来我将用该项目一起去探寻插件式开发的奥秘。首先我们将了解一下什么是插件式开发。
     插件式开发是什么?首先我们来先了解一些名词
插 件: 插件是可独立完成某个或一系列功能的模块。通常插件由宿主程序加载,不能独立运行。
宿主:宿主是承载插件运行的环境,为插件提供基本服务。通常插件由宿主程序管理和控制。(也就是框架)
插件式:通常是由开发人员编写宿主程序,并预先定义好系统提供基本服务接口和插件接口。然后由其他开发人员根据系统插件接口编写插件功能。通常插件以一个独立功能模块的形式出现, 对于宿主程序来说并不知道插件的具体功能, 通常宿主启动时检索插件信息,并根据预定的插件接口装载插件。
    我想了解了这几个名词之后大概能知道插件式开发的工作原理。不错,就是宿主在启动时把所有的插件加载到框架中,根据插件的定义组成了一个整体。通俗点讲,就像一个房子(毛坯),刚开始很空,往里头放个空调它就能制冷、往里头拉盏灯它就能照明、往里头放个电脑就能进行电脑操作等,房子的组合根据需要而不同,有人把房子组合成了咖啡厅,有人把房子组成了快餐店,也有人把房子组合成了软件公司等。这些都是根据需求去研发出相应的产品,当然这个例子稍微有点不太靠谱,但是我想让大家更明白插件式的一些概念。再举个软件的例子吧,比如WORD中要加入打印功能,那么我们首先能想到的是可能是这几点:版面设计、打印机、网络,如果往细里想可能是:打印菜单、菜单名称、图片、右键菜单、快捷键等一系列的功能。那么这些功能都是WORD打印模块的一个插件,如果没有这个模块WORD框架一样能正常工作,只不过是缺失了打印功能,这个时候就可以发现,其实一个“插件”并不是一个简单的函数或者简单的功能,而是一些列功能的组合。所以如果要我们去做一个WORD的打印插件,那么我们就要定义菜单、图片、提取内容、版面设计、网络环境判断、打印机选择、以及相关的快捷功能。这个插件的功能做好之后提供一个插件接口给宿主(WORD)程序调用,在宿主启动的时候将会调用该插件进行解析以及装载,从而该插件的功能就插入到了宿主程序中,但是该插件的运行并不影响宿主的正常运行以及其他插件的运行。
    这就是插件式的思想,说白了就是一些列的组合形成一个能够实现一系列功能目标整体,再强调一下该种开发思想的优点:高内聚、低耦合、重用性高、移植性强、稳定性高、可以进行混合编程等优点。呵呵,这些将是以后一段时间里我将陆续探讨与学习该思想的重点,因为这确实是我们每个项目中都迫切需要的一种理想状态。当然,不是每个项目都能够用上这种架构,但是了解并不会造成项目失败,一起探讨、共同成长!

夜深了。。。
未完待续。。。
下 一个帖子将介绍著名的开源项目SharpDevelop 的基本架构以及插件式开发的内核结构。。。
欢迎拍砖。。。z z Z z z。。。
2011-03-25 03:07
posted on 2011-04-01 15:49  农民工人笑了  阅读(2928)  评论(3编辑  收藏  举报