封装与重用演变史

封装与重用演变史
                                                       ----Mingo写于2012.07.16

 

转载请注明出自:blog.csdn.net/mingojiang


目录
概述
一、明码重用与封装
二、静/动态库/COM
2.1静态库
2.2动态库
2.3COM技术
三、跨语言/跨进程/跨机器
四、分布式技术
4.1WebService
4.2WCF技术
五、总结

 

概述

经常喜欢思考些问题,一直对编程技术的封装与重用的发展有些想法,想写下来,不过纯属人个观点,本人知识有限,生怕扰乱视听,如果有谬误万望指正。

编程技术从汇编(甚至更原始的其他语言)C发展到现在的C++JavaC#等高级语言,这是语言的演变,技术方面从开始的明码重用、静态库、动态库发展到如今的COMDCOMActiveXWebService再到WCF,无任是语言还是技术从未脱离两个主题,那就是封装与重用。下面对每一个阶段从背景与解决的问题两个方面讲讲。

 

一、明码重用与封装

C语言开始讲讲吧,更原始的语言我也不懂,C语言时代,应该是明码粘贴,把某一段代码贴来贴去,以达到重用的目的,后来程序员会把自己比较常用的一些方法,封装到函数里面,以达到重用加封装的效果,要用到某一功能时,把函数考贝过来,直接调用,不用去管函数里面的具体实现。当时感觉应该挺好的,,不错,把不同的功能模块封装到不同的函数中,这权且称之为明码重用与封装吧。

后来人们发现,通过函数封装重用,麻烦大大的,明码copycopy,总是个麻烦事吧,其次,明码不好维护,一不小心就改了,再一个封装不好,明码谁都看得见,有些东西是不想给人家看的,你懂的。让人更蛋痛的是,C++语言的一段明码在C#环境下使用,还得有些修改。这种背景下,静态库诞生了,解决了这些问题。

二、静/动态库/COM

        静态库与动态库都是基于二进制文件的重用,所以说原则上,可实现跨语言重用,只要接口是规范的,C++编写的静/动态库CC#等都可重用。前提是它们得符合接口规范。

2.1静态库

静态库是一种把方法封装在一个二进制文件里,只把方法的接口暴露出来即可供人调用的一种技术。这样就好办了,即省去了copy明码的麻烦,调用时也不用看那些不该看的,静态库提供者也放心不少,自己的劳动成果有一定保护了(可以在库里面加密钥,加有效期等)。使用范围也宽了,静态库的接口是标准的,所以C环境可以调用,C++环境也可以调用,后来发展起来的C#也一样可以调用。牛吧!

慢慢的,静态库的问题来了,静态库虽然是封装好了一个独立模块,但是调用的时候是直接镶嵌在主调环境中的,不够灵活,要更换升级的话得重新让技术人员编译一边。再一个重用上有局限性,想要调用静态库的程序都得镶嵌一份静态库,导致资源浪费,如果静态升级就更麻烦,所有的主程序都得拿回来重新编译一遍,麻烦呀。总之应该是升级麻烦,不灵活,再一个浪费空间,如果一个PC机中N个程序要用到某一个静态库,那就有N份相同的静态库,占内存,占空间。

那怎么办呢?当然是想办法弄个分体了,你看人家造车的就先想到这一步,车轱辘与轴承之间的连接,人家就没有用电焊烧死,而是留好螺丝孔,轱辘坏了,或者主人想升级了(换个好轱辘),把新轱辘拿来,在路边把螺丝一拧,旧的下下来,新的换上,OK,更不需要把车开回厂家让专业人员重新装卸。不知道是不是从这里得到了启发,先人们发明的动态库,解决了这些问题。这个比喻不是很形象,这里没有解决重用的问题,车辆与车之间不能共用4个轱辘,即使可以,那同时也只有一辆车能正常运行。而动态库是可以同用一个备份的。

2.2动态库

动态库是怎么回事呢,接口与静态库差不多,也是定好了规范的接口,不同的是,调用方法时,是动态调用的,与主调环境是不在一块的,一个计算机上只需要把动态库载入内存一次,所以同计算机下的程序都可以共用动态库,也就是说你要调用时,打开那接口就OK,就能得到结果。这样说太绕了,还是来打个比喻吧,你家楼下那个粗的自来水管好比动态库,你与你的邻居都可以通过小水管(接口)接到粗水管上,你与你邻居打开各自的水龙头都能用清水,并不需要每家都去自来水厂拉一根水管到自己家中。这解决了资源浪费的问题,因为大家共用一根水管。如果某一天自来水厂换场地了,从西丽水库搬到了深圳水库,别急,你并不需要去把自己的水管从西丽水库接到深圳水库去,那是自来水厂的事,他们会把供水的粗水管安装好,你家楼下的接口不用动,在家等着用水就OK了。

总结一下,一、所有程序(同一计算机下)可共用一份动态库,一次载入多方使用,解决了占空间内存的问题,二、动态库要升级,只更换动态库就OK,调用动态库那些程序都不用更新,也不用修改,解决了升级麻烦问题。除非你想要使用新版本动态库中的新接口,那样主调程序才要改。

但是DLL也有些问题,DLL主要是解决函数的封装重用问题,对于二进制文件的交互没有很好的支持,还有接口适用性有限,接口得用一些基本的数据类型,不然其他环境可能会面临调用的麻烦。下一步该COM出场了。

2.3COM技术

COM对接口做了更好的规范,接口是用idl描述的(DLL对语言有一定的依赖性,接口是通过基本数据类型来协调,也就是公认数据类型,或者说能相互转化的数据类型),使它能适应更多的环境,交互性得到了更好的支持,为跨进程,跨机器重用打下了基础,后来发展起来的COM+,DCOM就是基于这种技术。对于COM本人水平有限,不多说,如果想多了解的可参看《COM本质论》。总之,COM解决了DLL接口问题,与DLL交互问题(DLL一般只被调用,交互方面支持有限)COMDLL的一种延伸,COM某种程度上可以说是DLL,DLL并不是COM.

 

三、跨语言/跨进程/跨机器

        COM局部的实现的跨语言重用,但是它只是本地重用(同一机器下),为支持跨进程,跨机器,后来诞生了COM+,DCOM,ActiveX

        无论是COM+,DCOM,还是ActiveX都是基于COM技术,在这里我们简单介绍一下就可以。这些技术都是为了支持跨进程,与跨机器(跨网络)重用的,DCOM开始萌发了分布式的思想,COM+DCOM都能跨越这些边界问题。后来感觉网页调用DCOM之类可能有些不便,才有了ActiveX,ActiveX就更牛了,可以网页调用,一般程序调用就更不用说了,它的接口比COM更先进,适应性更强,ActiveX载入的时候,可生成相应语言的类,C++调用会生成C++的类,C#亦然,使用起来非常方便,更何况它还能供网页调用。我在这里说一个例子吧,公司开发的一个网页需要访问串口来读写串口设备上的IC,网页要访问串口那是个麻烦事,后来我用C++写了个ActiveX控件,把与串口的所有操作都封装到了ActiveX控件中,网页只管调用接口即可。

 

四、分布式技术

        这是基于网络环境中的一种技术封装与重用,先后有Enterprise Architect技术、RPCWebServiceWCF等技术。这就更复杂了,这个服务可以在世界的任意角落,只要把接口暴露在网络上即可,这就涉及到通信,接口规范。先说通信,WebService说说,WebService一般能实现即问即答通信模式,也就是你请求接口,给你返回结果,它不主动给你通知,也不主动给你结果。通信协议也有局限,是基于XMLhttp技术,不支持tcp,管道等通信协议。在这里就介绍一下WebServiceWCF吧。

4.1WebService

        WebService是基于xmlhttp的一种技术,WebService寄宿在IIS,配置好一些接口,可以通过Inter网向WebService发出请求,得到想要的数据。原则上支持跨机器、跨网络共享,还跨语言,原则上C++C#等,支持XMLhttp技术的都可调用。

WebService数据用XML描述,通信基于http协议,一般用.Net技术开发的,.Net环境下调用WebService非常方便,C++调用那就有些麻烦了,得通过一个叫作SOAP的第三方插件来协调接口问题。java访问就有麻烦,总之,不是很理想了,WebService是微软搞的,.Net之外的技术要使用能不没点麻烦吗?

 

4.2WCF技术

        WCF叫作Windows Communication Foundation,它是WebService的延伸,从接口规范,通信支持,宿主环境等方面做了扩充与完善。WCF接口使用WSDL描述,能通过工具生成相应语言的调用方法,如能生成C++的调用方法,不再需要那个SOAP,通信方面,在协议与技术上都得到了完善,它支持TCP、管道、http等协议,而且可以双向交互,也能像打电话一样,你说说我说说,相互交流了,宿主方面,WebService一般是寄宿在IIS上的,WCF可寄宿在IIS,也可寄宿在桌面程序上。

五、总结

        总之,这些都是围绕着封装与重用在讨论,粗略地介绍了些原理,技术细节要再看相应的技术文档。

        开始是面向过程,如汇编,C这些都是面向过程的技术;后来诞生了C++,面向对象,通过来具体表现。再后来发展了面向组件,就是模块化,分工化。把业务切成N个模块,各自生产各自维护封装,然后把成品凑一起做个大拼图。再后来发展成了面向服务,也就是刚介绍的WebServiceWCF技术。面向服务简称SOA,这里举个例子:开始一堆广东人在一起,他们都讲粤语大家勾通都没有问题,后来客家人、北方人、外国人都来了,说广东话不合适了,但是说什么话好呢,世界上并没有一种语言大家都能听懂的呀,后来有个天才发明了一种翻译机制叫作WSDL,可以把任何语言转化成英语,然后又可以把英文转化成任何语言,如:客家人说一句话,翻译机把客家话翻译与英语,到了广东人那里,英语再变成粤语,到了福建人那里英语译成了闽南话,这样勾通就无阻了。后来翻译机制不但能翻译人直接说的话还可以翻译电话通话,还翻译文字信息,这叫支持多协议。

        发展轨迹是:面向过程、面向对象、面向组件、面向服务。现在大家又开始扯”,不过目前在中国还是云里雾里的,也没让我们在现实中真正体会到什么是”,什么云电视,云手机,个人感觉炒作概念、忽悠成分多于真实意义。我个人只把它理解成面向服务的一种新思维,如面向对象一样,开始就是一种思想,仅此而已,至于后来有那么多具体实现,那是后话。

 

转载请注明出自:blog.csdn.net/mingojiang

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章