2010年10月12日星期二

Lib、DLL、COM、.Net的理解

坦白的说,作为一个学生,我们的编程、项目开发能力肯定没有那些在公司里的软件工程师强。但是,确切的说,我们的Potential未必比他们差。很多我的师弟都问我,研究生比之本科毕业后参加工作的人,难道他们的优势不是在于项目经验吗?当然,我这里仅指我学的计算机专业来说。以我个人的观点,我认为这种想法是错误的。如果我们读研究生是来做项目,那还真不如参加工作,做个软件工程师划算。技术上的事,归根到底也是一个熟能生巧的过程。就像咆丁解牛,做得多了,始终也会得刀后忘刀。但是可能咆丁并不会思考为什么他会得刀后忘刀。所以,不管在什么阶段,善于找到问题的一般规律,努力改善自己做事的效率,思考一些创新性的问题,总会使你有所进步。这样看来,研究生比之本科生的优势也就不言而喻了。

 

废话说了一大堆。下面转入正题。

 

本科的时候,应该说我还是具备一些编程能力的。但是我的这种能力很大程度上取决于我的逻辑思维能力,并不是十分的系统。这几天重温了一下以前的东西,我试图总结一下我对标题上四个名词的理解。

 

LibDLL

 

LibDLL这两样东西我想大多数编过程的人都用过。Lib是一个静态库,既然是库,那么它提供一系列的接口(函数)给开发者,Lib库在程序被链接(Link)这个过程时会并入生成的可执行文件中(如EXE)中。这样做的缺点是不言自明的。假如有多个开发者都使用这个库,那么它会有多份拷贝,十分地浪费资源。DLL解决了这个问题,它事实上也是一个库,也提供一系列的接口(函数)给开发者。所不同的是,它在程序执行时被调入,并且它在内存中只保留一份拷贝,不管有几个开发者在使用它。这样可以有效的节省资源。

 

COM

 

COM的中文名称叫做组件对象模型。大一大二时我也没有接触过它,后来是帮人家做一个嵌入到IE中的应用程序时才开始学习它的。我讲一讲我对它的理解。从本质上说,COMDLL并没有什么区别,它提供一系列的接口(Interface)给开发者,并且在被调用时只在内存中保留一份拷贝。不同的是,COM的组织结构跟DLL是不一样的。COM试图提供给开发者一个清晰的库结构。我们知道,DLL其实就是一些函数的组合,更进一步说,如果我们导出的DLL是一个类,那么它也就是一个类结构。这种层次结构是模糊的。COM要求每一个导出类必须继承一个接口类。也就是说,我们要导出一个具有一定功能的类(比如说算术类Math),我们必须定义它的接口(InterfaceOfMath)。这样,开发者想使用Math时,首先查询(Query)这个接口,在获得控制权后,才可以使用Math的功能。当然,这里还有许多的细节问题,比如说所有的接口都比如继承所谓的“万恶之源”IUnkown接口,而IUnkown接口定义了一个COM必须包含的东西。这里我只是试图让大家知道COMDLL只是在结构、使用方式上有所不同,本质上并无大的差异这个事实。

 

.Net

 

我没有开发.Net应用程序,但是读过一些资料。我讲一下我对它的理解。我们很多人都做过一些所谓的图书馆管理系统(或者一些其他的管理系统),我也做过(^_^),这事实上是一个两层应用程序。第一层是(应用程序+ADO.net),第二层就是数据层。在说得确切点,这事实上就是一个把所有SQL语句都嵌入到你的应用程序里的系统。这种系统维护起来是相当麻烦的,我想这些麻烦很多人都体会过。比如说数据层里的一个表改动了,那么我们需要修改与这个表相关的所有SQL语句。在这个基础上,人们提出了三层应用程序。这种方案将第一层分为(应用程序+ADO.net)、(XML Web ServiceADO.net)两层。具体的XML Web Service我这里不详述了。有一点是值得注意的,就是在这两层之间,它们之间的通信是通过HTTP的。那么,问题就出来了,假如没有Internet或者HTTP支持,那么这个系统将不能正常工作。在这种情况下,.Net出来了。.Net结构中,也是将第一层一分为二,不过这两层分别为(应用程序+ADO.net)和(NT服务+ADO.net),而.Net取代了HTTP成为这两层之间的通信方式。当然,至于.Net的通信细节,协议等问题,MSDN上讲得是比较清楚的,我这里不再详述。它的优点也是显而易见的,至少它去掉了HTTPInternet这两个瓶颈。

 

最后,我试图做一个总结。软件开发的技术总是随着时间的推移而飞快的进步,各种各样的模型相继推出,事实上,它们也是为了解决一些相应的问题。而这些五彩缤纷的技术,被我们所理解、运用,就像上述我说的四个技术一样。但是,我们却很少思考为什么这些技术不是被我们创造出来的。我对中国的软件业并不了解,但我见过的一些工程师(甚至包括我在内),他们遇到一个设计上的关键问题时,总是试图回避,试图等待国外的大师拿出更新的解决方案来。事实上,这可能也是我们中国的软件业一直很难取得真正突破的原因之一。

 

中国高校的研究氛围并不好,这需要我们大家的共同努力!

没有评论:

发表评论