创建人: 《程序员》
前言
.NET作为微软对抗J2EE的主要武器,在许多方面已对J2EE的领先地位进行了强有力的挑战。近年来,学习.NET的人越来越多,相应地造就了.NET书籍的繁荣,面对让人眼花缭乱的.NET书籍,我以一名程序员的眼光,写下我对所看过书的评价。对一本书的好与坏,各人必定看法不一,文中观点,都是建立在我个人的经验与感受之上,期望读者指出我的偏颇之处。
这里先介绍一下我的技术背景与学习.NET的缘由,有助于读者理解文中我的观点。
我开始是一名熟练的VB程序员,后来又用过C++、Delphi、Java等开发语言。同时也对面向对象分析与设计的理论进行了学习。由于我需要将一个用C++开发的基于win32平台的产品移植到.NET平台之上,于是,我开始系统地研究.NET。在半年的时间里,我看了国内出版的几十本.NET书籍。我没有去学C#,而是选中了许多人并不看好的VB.NET,并用它高效地完成了任务。由于需要开发一个Windows Form产品,我在阅读时是不分C#与VB的。所以,这篇文章我也介绍了部分C#的书籍。
目前,国内出版的.NET书籍绝大部分是引进国外的,主要由清华大学出版社出版,清华出版的.NET书籍又大致分为微软.NET程序员系列与wrox公司的.NET系列。前者的特点是黑色封面,每个封面上有一种工具图片;后者是红色封皮,部分书籍上印着不少人像。为方便起见,我以“黑皮书”和“红皮书”来分别称呼。
黑皮书号称是由微软审定的权威。该系列书其长处是可操作性非常强。比如其中的《 ADO.NET程序设计 》,有图有步骤,不厌其烦地将C#与VB.NET代码和步骤重复书写,有时甚至到了罗嗦的地步,有滥充篇幅之嫌。另外,我看的几本都有一个毛病:重点不突出。学了一堆具体操作,让读者光知其然,不知其所以然,对相关理论的阐述不能做到深入浅出。因而,我买了一两本之后就不再买了,我对这系列书的评价是:适合初学者依葫芦画瓤地学习,对有经验的程序员,拿来看几天,就会把它丢到一边。
红皮书系列是由Wrox公司出版的,Wrox公司的口号是“程序员写给程序员的书(Programmer To Programmer)”。该系列的书实用性强,是我所阅读的主要书籍,也是本文主要评论的书籍。
二、快速把握.NET平台
作为一名想开发.NET平台软件的程序员,第一步是掌握一门.NET平台的开发语言。就我而言,看的第一本书是《 VB.NET高级编程 》。这本书的一到三章是对.NET和VS.NET的介绍,老生常谈,可以很快翻过。从第4章到第9章,则集中介绍了VB.NET的语法。作为一名VB6程序员,这一部分一定要仔仔细细地看过,从VB6到VB.NET,是一个质的飞跃,最大的变化是面向对象在VB.NET中得到了完全的支持。这本书很厚,但后面的章节乏善可陈,用不着全部看完。我快速地挑选几章与我工作有关的进行了阅读,就对.NET有了一个总体印象。
《 VB.NET高级编程 》这本书不适合对VB一点不懂的人学习,另外,虽会VB6,但没掌握面向对象基本理论的人也不适合,因为这本书对面向对象的基本理论没作详细介绍。
三、深入把握特定领域
在掌握了一门编程语言,对.NET framework有了基本了解,并熟悉了VS.NET开发环境后,下一步就是根据自己的需要,选择一个合适的领域深入下去。
1.数据库
黑皮书:《 ADO.NET程序设计 》,前面已介绍,不重复了,该书详细但缺乏保存价值,建议借阅而不要购买。
红皮书:《 VB.NET高级编程 》,有关ADO.NET开发的仅一章,太粗略。
2.语言与面向对象技术
我推荐的是红皮书系列的《 Visual Basic .NET类设计手册 》,黑皮书的《 Visual Basic.NET和Visual C#.NET面向对象程序设计 》。
我在大学讲授OO课程时,认为这两本书是.NET下目前我所能找到较好的两本面向对象编程书籍。如果是从VB6转到.NET(不管你用的是VB.NET还是C#),强烈建议仔细阅读其中一本。
3.系统架构与组件开发
《 Visual Basic.NET面向对象可重用组件开发 》
当时在书店看到这本书,没想就买下来了,我想看看老外的大牛程序员是怎样开发可重用组件的。然而,没想到却让我后悔。
这本书太注重于用代码实现某个功能,全书的大部分内容都被例子代码所占据了。我不是说代码不重要,但当一个程序员开始关注软件重用性和软件架构的合理性后,他是不会将主要注意力放在如何实现某个具体功能的代码之上的。
《 VB.NET设计模式高级编程—构建强适应性的应用程序 》
设计模式是面向对象理论的重要组成部分,当我看见《 VB.NET设计模式高级编程—构建强适应性的应用程序 》这本书时,真有点喜出望外,终于看到讲.NET设计模式的书籍了。
但仔细看了前三章,我就失望了。
第二章介绍了将抽象类工厂设计模式应用于数据存取层的设计,没有什么新鲜的,不过倒是有一点实用性。第三章介绍了使用Decorator和Strategy设计模式来设计中间层,但由于作者表述不清,让读者很难把握全貌,看着很累。第四章介绍了如何应用著名的MVC模式来设计表示层,这一章我已经没有耐心看下去了,全书就这样“虎头蛇尾”地被我扔到了一边。
其实,写作系统架构设计方面的书籍是很难的,因为这些理论都足够抽象,而且一个体现相关理论应用软件系统一般都是比较复杂的,如何深入浅出地向读者讲清楚,非常不容易。客观地说,这两本书的作者做得都不错了。
相比之下,Java系列的就有好书,例如我看过的《J2EE核心模式》(Sun公司核心技术从书,机械工业出版社),就不错,能引人深思。
然而,最应该仔细精读的是四人帮(Gang of Four)《设计模式——可复用面向对象软件的基础》这一经典巨著,还有电力出版社最近引进的影印版《Design Patterns Explained》( 设计模式解析(影印版) )以及《 重构——改善既有代码的设计(影印版) 》,都是极为优秀的重量级著作。相比之下,.NET的这两本类似书籍就差多了,可以看成是OOAD理论在.NET下的实例,但想通过这两本书来学习OOAD,无异于盲人摸象。
《 Visual Basic.NET解决方案工具箱—30个.NET实用组件 》
这是一本好书,不论是初学者还是有经验的程序员,都可以从中学到许多东西,建议C#程序员也要看看这本书。
这本书提供了30个实用的.NET组件,有许多可以直接应用到项目中。这本书将所有组件分为:应用程序组件、GUI与图形组件、网络与文件系统、安全性、模式和算法五个大类。每个例子短小精悍,却很实用,而且很能说明问题。我特别欣赏每个例子的结构安排:先是背景介绍,告诉读者在现实开发中会遇见哪些问题;接着是可以使用的技术(.NET所提供的功能);然后设计出一个总体的技术解决方案;接着解释具体的代码实现;例子的运行结果描述;最后指出当前技术方案的局限性。简直模拟了一个微型的软件项目开发过程。例子也选择得很有特色,如制作Splash屏幕,正则表达式验证,都非常实用。
这些组件虽规模不大,但却涉及了许多.NET中最重要的技术,如反射,XML,多线程等,并不简单。看了此书,会引起程序员开发自己组件的强烈愿望。
4.可视化界面组件开发
一般,程序员对各种各样的控件很感兴趣,VB与Delphi的成功,很大原因就是因为他们拥有丰富多彩的控件库。
刚接触.NET,我发现其中提供的控件并不多,但是看看.NET的体系结构。我高兴地发现,在.NET中,一切都是对象!我现在终于可以用VB.NET自由地从.NET类库中派生出自己的组件,给它加上任何我所需要的功能。面向对象的开发方式,加上增强了的GDI+,我可以肯定,用不了多久,.NET下的用户界面组件会让人眼花缭乱,叹为观止的。现在,你到InterNET上搜一搜,就有这种感觉了。
比之传统win32平台上的ActiveX控件,开发.NET组件要有趣得多,也要方便得多。尤其是对于Windows Form程序,开发自己的可视化界面组件,可以给软件添色不少。
《GDI+程序设计》
一本好书,开头几章对GDI+作了非常详尽的介绍,从基本绘图对象(Pen、Brush、Font…)讲起,还介绍了许多基础知识,后半部分是从头开始“画”出来的自定义控件作为实例进行说明。
《 Windows GUI高级编程—C#编程篇 》
这本书的特点是深入剖析了Windows Form的运作机制,对于创建自己的数据绑定组件的介绍尤其有特色,是一本有一定深度的书。
5 .NET framework
.NET framework是.NET的核心支撑平台,所有.NET应用程序都需要framework提供运行时支持。因此.NET framework所提供的系统服务,就成了我们开发程序中的必备利器。这里,我介绍红皮书系列的五本书,分别涉及.NET framework几项重要的系统功能。
《 ASP.NET XML高级编程—C#编程篇 》
XML的重要性无庸我多说,对XML的全面支持是.NET设计者非常正确的一个决策。在此书中,作者介绍了XML技术中的核心部分:SAX、DOM、XSL、XPath等,大体上作者各用一章的篇幅来介绍相关理论在.NET中的实现(即各种类的设计),并举例说明这些类的使用方法,非常实用。同时作者针对.NET的特定领域,如MSXML组件、ADO.NET和ASP.NET,介绍了XML在这些地方的应用,最后是案例研究,并有一章专门针对C#,讲述如何在C#中利用XML格式的注释来自动生成帮助文档。
这本书的内容非常丰富,是一本不错的书。不过需要指出的是,看这本书之前最好先看一本XML的入门读物,至少弄明白DOM,XSL等术语是什么含义。
《 Visual Basic .NET串行化参考手册 》
所谓串行化,就是把内存中的一个对象数据转化为字节流,然后将其存放到存储器中,在需要时再从存储器中将字节流读出,然后通过反串行化(又称并行化)在内存中重建原来的对象。
这个技术非常有用,我想过,至少它可以用来实现像Word那样的出错恢复功能;可以实现断点续传;可以将一个对象通过网络传送到另一台计算机上,然后在那台计算机中重建一个克隆的对象……
这本书全书围绕着浅串行化(串行化的结果是人可以识别的文档,如按SOAP编码的XML文档)和深串行化(将对象串行化为二进制流)两种方式进行介绍,实际开发中可能遇到的各种问题都有涉及。举的例子都很易懂,很容易就可以在实际项目中使用,讲得也清楚明白。不足之处是罗嗦了一点。算是一本物有所值的书。
《 Visual Basic .NET反射参考手册 》
反射(Reflection),通俗地说,就是根据名字来创建对象的方法。只需给定一个类名字(String类型的变量),.NET就可以利用反射机制在内存中创建这个类型的对象。这是一种极强大的功能,它使创建即插即用的软件组件成为了现实。当我看到.NET的反射机制时,非常兴奋,这是我一直想要的东西。我原先就想用C++在Win32平台上实现这个功能,但发现难度很大,没能形成一套可行方案,因而不能在项目中应用。如今.NET把它嵌入到了系统框架核心中,我不得不佩服微软.NET设计者对程序员在开发中遇到困难的深入把握。现在,我已经在项目中采用了这一技术。适当应用反射机制,可以构造出可动态升级的软件系统,并增强系统的灵活性,而仅仅需要付出一点运行上的效率损失。
反射手册这本书很薄,但基本上讲清了如何利用代码通过名字来动态地创建对象,调用对象的属性与方法,例子也比较简短实用。200页的书,要卖32元,有点贵,但我也没后悔,它确实帮了我。
《 Visual Basic.NET线程参考手册 》
VB6一直不能直接支持多线程开发,是它的一大缺陷。而.NET从一开始就建立在多线程的基础之上,VB.NET现在终于可以像Java一样,轻松地开发多线程程序了。VB程序员从没这么扬眉吐气过。
但这本专讲多线程的书,则是我看过最无味的一本了,翻译得也不好,介绍应用程序域与线程、进程关系那一页,几乎让人不知所云。这本书我看到线程池一章就再也看不下去了,半途而废。我在网上搜索的几篇零散的多线程文章都比这本书讲得清楚。
这本书,我深感失望!
《 VB.NET字符串和正则表达式参考手册 》
字串操作在所有的程序中都是频繁出现的。这本书前半部分专注于String类和StringBuilder类的介绍,甚至涉及到VB字串操作代码生成的MSIL源码,这部分对想深钻.NET框架内部的程序员可能有点好处。
该书第二部分则专注正则表达式,清晰明白,资料收集得比较全面,基本满足实际开发需要。从Wrox网站下载其所附的源代码之后,发现其中有一个正则表达式的工具RegExTester,也很实用。
6. 报表
在MIS系统中,没有报表支持是不可想象的。我是在VB 5开始认识Crystal Report(水晶报表)的。不知什么原因,VB 6换成了Data Report(这个产品实在不怎么样)。但当时对Crystal Report的印象并不好,要做出由程序来控制的自定义报表非常麻烦,我们在实际开发时,都宁愿将数据导到Word或Excel中,调用OFFICE强大的图表功能来实现报表预览,打印等功能。
到了VS.NET,Crystal Report再次出现,并集成进了开发环境中。我对它引发兴趣源自2002年微软VS.NET中文版发布会上的新功能展示。在我正式开发.NET平台下的软件时,认真研究了一下Crystal Report,我发现水晶报表在.NET的支持之下,已非吴下阿蒙。为什么这样说?举个例子,我看到水晶报表现在可以支持XML格式的数据,这就意味着我可以在内存中动态地生成一个ADO.NET数据集,然后再传给水晶报表引擎,数据不一定需要来自数据库,这带来了极大的灵活性。不要小看这一点,在多层分布式系统环境下,经常需要对数据进行各种处理后再传给报表,报表组件支持数据源的多样性是非常关键的。
出于对报表的关心,我买了红皮书系列的《 Crystal Reports for Visual Studio .NET高级编程 》。
然而,这本书实在不应起名为《 Crystal Reports for Visual Studio .NET高级编程 》,改为《操作手册》可能更确切。作为一名程序员,对软件的操作一般都可以凭经验无师自通。我们关心的是在程序中如何全面方便地控制水晶报表。很遗憾,这本书中并没有给出足够的代码告诉读者如何做,反而讲了一堆操作。事实上,讲操作他也没讲好,反不如我看过的铁道出版社所出的那本《 .net Crystal Report实战演练 》,铁道出的这本书图文并茂,更关键的是其例子通俗易懂,通读一遍,再在电脑中将光盘中的示例运行一次,即明了水晶报表能做出什么样子的东西。
对于非常重要的报表组件发布,两本书都不能让我满意。怎样在没有安装VS.NET的电脑上运行带有水晶报表的软件?从Win98到Windows Serv-er2003,在不同版本的Windows下运行程序会有什么不同? 我在开发中遇到的这些实际问题,在书中都没有详细介绍,我是通过互联网获取相关资料的。
7 . 安装与部署
程序写完了,就需要打包部署,红皮书《 Visual Basic .NET部署手册 》就派上了用场。此书写得一般,对VS.NET提供的安装项目解释得较清楚,并且基本上介绍了安装与部署过程中涉及的组件发布、配置、授权等方面,但对于报表部署则没有涉及。
四、总结
在半年之内,出于研究与开发目的,我蜻蜓点水地看了几十本.NET书籍,对.NET系列书籍的总体感觉是精品书籍太少,值得让人反复阅读、品味再三的更是一本也没有,相比Java系列,真是差了不少。这是什么原因?难道真的是Windows领域没有大师?绝不是这样,像创造出Delphi、VJ、C#这等重量级产品与语言的Anders Hejlsberg,谁能不承认他是大师?我想可能是大师们都太忙,没时间写书,这是读者的一大遗憾。另外,我想可能还有另外一个原因,那就是.NET出现时间还不长,.NET开发者的技术需要积累,经验需要累积,之后才会有经典著作的出现。
作为一名中国的程序员,我更盼望能看到出自国人之手的经典著作,不知我们还要等多久?