内容提要
本书着眼于读者在掌握了Visual Basic语言本身的基本知识后,对于建立一个成功的项目来说还需知道的设计和开发策略,详细论述了在开始Visual Basic开发之前的设计活动及开发之后发生的过程(如部署、更新管理和测试等)。其中,融入了许多作者在多年的项目实践中总结的开发理念,读者可以借此进入到一个更高的开发境界。
Visual Basic 2005和.NET Framework结合,提供了非常强大的开发环境。开发人员利用这些工具,可以相当方便、快捷地构建功能强大的应用程序。 然而,随着功能的强大,复杂性也随之增加。目前有许多讨论Visual Basic语言的书籍,如果要构建相对简单的应用程序,通常有这些书就足够了。然而,讨论有关更复杂Visual Basic应用程序开发中会面临的复杂问题,讨论Visual Basic应用程序的设计、建模、用户界面设计或测试的书籍却很少。 而且,大多数书中都没有讨论某些重要的高级主题(这些高级主题不适合普及型图书)。它们通常没有花时间深入讨论线程、反射、高级内存管理和打印,而这些对于构建真正的高级应用程序是十分必要的。 本书填补了这些书籍在Visual Basic开发方面留下的空白。它讨论了开始Visual Basic开发之前必需的设计活动,还讨论了开发之后发生的过程(例如部署、更新管理和测试),这些过程对于成功的Visual Basic项目而言不可或缺,但它们又不是语言本身的一部分。最后,讨论了现实应用程序中非常有用而其他书籍却很少关注的高级主题。 选择Visual Basic的理由 有位Visual Basic编程人员曾这样开C#的玩笑:“Visual Basic .NET和C#之间的区别何在?3个月而已!”意思是说,Visual Basic .NET的语法很容易理解,用它构建应用程序比较快。同样,C#编程人员也有关于Visual Basic的玩笑,意思是C#更强大。 实际上,Visual Basic不一定比C#更容易使用,C#也不一定比Visual Basic强大多少,除了有些格式不同之外,两种语言的基本形式很相似。优秀的C#编程人员产生小型应用程序的速度与Visual Basic开发人员一样快;优秀的Visual Basic编程人员也可以和C#开发人员一样有效地产生对象层次结构和图形代码。 然而,构建成功的应用程序不仅仅是写出大量的代码,许多开发人员忽略了这一点。代码在今天、明天乃至在应用程序的整个生命期中都必须工作正常。 比编程语言更重要的是开发人员使用语言的方式。有很多使用C语言、FORTRAN语言乃至汇编语言写的代码,其结构良好、文档齐全,训练有素的任何人都能在修改代码时使向代码中增加模糊bug的机会最小。笔者也见过一个有56 000行Visual Basic代码的项目,其设计欠佳,文档不全,甚至从事此项目多年的开发人员做一个简单的修改也要花一周甚至更长的时间,而且有大约50%的机会添加新bug,这些bug可能要再用一到两周的时间来修复。 因此,这能说明您的语言选择得不好吗?并不完全是这样。首先,开发环境在现代应用程序开发中发挥着非常重要的作用。Visual Studio为编程、调试和重构代码提供了无与伦比的工具。IntelliSense使得很容易记住某个例程需要什么参数。自动完成让使用更长、更有描述性的变量变得更方便。设计时的语法检查会在输入代码时突出显示可疑代码。XML注释和特性让您创建比以往更加自文档化的类、方法和事件。使用Visual Studio语言写出有效、可靠、可维护的代码比用其他许多缺少开发环境支持的语言要容易。 虽然Visual Studio提供了所有这些工具,但是并不意味着您能正确使用它们,但Visual Basic使您在这方面稍具优势。Visual Basic始终是一种描述性语言。其关键字相当自文档化,并可以提供额外的上下文,让您明白发生了什么。子例程中包含几个嵌套循环的一段C#或C++代码,可能以一系列右括号结束。没有额外的信息帮您记住括号是什么的结束。您可以(应该)添加注释来说明,但语言本身不会要求您这样做,因此许多编程人员也没有这样做。 相反,Visual Basic用适当的End Do、End If、End Sub及其他语句来结束一组代码,这些语句让人很容易明白它是什么类型的代码块的结束。虽然您仍然应该添加注释来说明结束的代码块的用途,但是Visual Basic本身也提供了一些基本注释。 因为Visual Basic比其他Visual Studio语言更具有描述性,所以它也鼓励开发人员采用更有描述性的风格。每次写For循环,都可以看到关键字,这些关键字有助于确定循环的目的和范围。Visual Basic语言是透明的,因此开发人员更倾向于让自己的代码透明。 (.NET Framework在这方面树立了典范,它提供了长的、描述性的变量、类、方法和事件名称。像SortedList这样的类名和像DrawRectangle这样的方法名很容易理解,因此采用类似的编写描述性名称的习惯很容易。) 没有哪种编程语言能够要求您写出优秀的代码。但是Visual Studio提供了强大的工具,它们可以减少写优秀代码的障碍。这些工具使构造自描述性代码变得非常简单,因此没有理由去写充满晦涩、不一致缩写的密集型、不透明代码。Visual Basic用自描述性方式完成自己的工作,对保持代码透明方面提供了一些额外的帮助。如果您愿意,可以使用C#,但是笔者更喜欢充分利用每个可用的有利条件。 本书读者对象 本书适用于高级Visual Basic编程人员。本书假设读者已经有Visual Basic 2005的经验,对该语言很熟悉。本书不讨论任何语言基本原理,也不包含任何进修资料。如果您觉得需要更好地体会Visual Basic,请参阅笔者编写的《Visual Basic 2005编程参考手册》一书。 在本书中会尽可能地讨论高级主题,然而,在有些案例中,会将类似的代码归纳起来为更高级的主题提供背景。但本书各部分的目的是讨论高级主题,这些高级主题要么比较复杂,要么在其他地方难以找到,或者既复杂又难以找到。 注意,不是所有高级主题都很复杂或难以理解。例如,下面这句话概括了全书最重要的概念之一: 实际上,这句话非常重要,即使您从本书中没有学到其他什么方法,能记住这句话也就物有所值了。然而,一旦您真正理解了这种思想(本书稍后特别是在第14章会讨论到它),就会明白它其实非常显而易见。当然,这是一个高级概念,笔者从未看到其他书明确提到过这一概念,许多开发人员也是经过多年调试他人的代码之后才明白这一点的。 本书的结构 本书所有章节可分为4个部分。 第I部分:设计 本书这一部分包含的几章讨论了编程开始之前的活动。介绍了开发和设计方法,以及一些有用的设计技巧。许多编程人员跳过了这些阶段,后来当发现他们的最初设想不适用于应用程序时,就会为此付出巨大的代价。 第1章“语言选择”讨论了选择开发语言时应该考虑的一些问题。本书假定您使用Visual Basic,但本章也讨论了该语言的一些不足。您可能会坚持使用Visual Basic,但也应该知道该语言的一些弱点,以及如何应对它们。如果知道哪里可能会出问题,处理它就会更容易。在一些极端案例中,您可以将一些更棘手的模块转移到用其他语言编写的库中,然后使用Visual Basic代码调用这些库。 第2章“生命周期方法论”讨论了不同的生命周期方法,例如瀑布、迭代原型和阶段性交付模型。这一章解释了为什么Visual Basic是特别好的迭代地构建应用程序的工具。绝大多数开发人员都习惯使用某种特定的方法,并且从不会改变。即使您确定您会使用迭代原型构建应用程序,也值得花时间了解其他方法的最好特征,以便从所有这些特征中发现最好的想法。 第3章“敏捷方法论”讲解了不同的开发策略,例如敏捷开发方法(如极限编程(XP))、测试驱动的开发和契约式设计(DBC)等。本章还讲述了对Microsoft的Web站点上关于使用Visual Studio进行敏捷开发的信息的引用。 第4章“面向对象的设计”讨论了面向对象设计中的一些问题。介绍了统一建模语言(UML),以及设计面向对象系统的一些技巧。讨论了Visual Studio Team Suite和Visual Studio Team Architect支持UML的方法,讲述了开发人员使用的其他UML工具。同时还介绍了一种可以通过从不同角度(例如从用户界面、文档和数据的角度)审视设计来彻底理解应用程序的方法。最后讨论了从面向对象的思想(例如封装、多态性、松散耦合和面向组件设计)中获得最大好处的方法。 第5章“用户界面设计”讲解了一些重要的用户界面概念。讨论了7 +/-2规则,讲述了使用容器(例如制表符条和滚动控制)来显示大量数据的方法。讨论了SDI和MDI应用程序的优缺点,研究了菜单、工具栏和键盘快捷方式,探讨了为特定用户和特定场所定制用户界面的方法。 第6章“数据存储器设计”讨论了不同数据的存储和恢复策略。探讨了一些选项,例如关系数据库、XML、纯文本文件、系统注册表(System Registry)、数据编译、资源文件和INI文件。讨论了程序串行化和反串行化其数据的方法。注意,本章并没有深入讨论关系数据库设计。例如,本章没有详细讨论标准化和索引,而是建议参考其他书籍来获得更多信息。 第7章“设计模式”介绍了Visual Basic中的设计模式和反模式。讲解了设计模式和反模式的定义,介绍了一些最有用的模式。要了解其他详细情况,本章建议读者参考其他书籍,例如Mark Grand和Brad Merrill所著的Visual Basic Design Patterns(Indianapolis: Wiley,2005)。 第II部分:元开发 本书这一部分包含的几章讨论了应用程序开发人员使用的编码工具。其中包括给开发人员提供设计时支持的插件、可放在表单上的自定义控件和组件,以及让用户在运行时执行脚本的技术。一个好的元开发工具库可以让后续开发变得简单且少出错。 第8章“代码片断、宏和插件”讨论了如何为Visual Basic 2005开发环境写插件。这一章简要介绍了代码段,讨论了适合使用代码段而不适合使用插件的时机。 第9章“脚本”讲解了程序允许终端用户编写和执行脚本的方法。讨论了让用户执行SQL语句、VBA代码和VB.NET脚本的方法。还讨论了程序如何提供对象模型以便用户用VB .NET脚本控制它,以及开发人员如何使用相同的脚本技术,在编译应用程序之后再给它赋予新功能。 第10章“自定义控件与组件”讲解了构建自定义控件的方法。讨论了构建自定义控件的3种主要方法:UserControl、编写子类和从头开始建立。本章还讲述了构建一种特别有用的自定义控件(称为扩展程序提供者)的方法,列举了一些非常有用的数据有效性验证扩展程序提供者的示例。 第11章“属性支持”讨论了建立自定义控件使用的自定义属性编辑器的方法。讲解了使用类型转换器允许编辑器(例如,设计时的Properties窗口和运行时的PropertyGrid控件)编辑对象复杂属性的方法。 第12章“特性和XML注释”讨论了可以用来“装饰”代码的有用特性。这些特性使后来使用代码的其他开发人员(或您自己)可以看到附加信息,这样他们就可以更方便地正确使用代码。 第III部分:开发 本书这一部分包含的几章讨论了与应用程序开发工作的主体相关的主题。这几章着重讨论写代码的过程,以及一些更有效的写代码的方法,而没有详细讨论语言特征和语法问题。 第13章“文档”讨论了让较复杂的项目变得文档齐全的方法。讨论了Visual Basic 2005支持的特殊XML文档注释,并通过高级示例说明了使用它们自动生成文档和帮助文件的方法。 第14章“开发理念”讲解了高级编码的概念,这些概念可以让开发和维护复杂应用程序变得容易。本章介绍了一些思想,例如用于测试的高级设计、防护性和进攻性编程以及代码为人而写,不是为计算机而写等。这些思想在员工不断变化的大型项目中特别有用,因为它们为接手项目的新开发人员提供了上下文。 第15章“编码标准”讲述了笔者提出的一套特别的编码标准,该标准可以使阅读代码变得容易。讲述了笔者提出的标准与Microsoft 及其他公司使用的标准之间的不同之处。这些标准为开发您决定采用的规则提供了起点。没有哪一套标准是完美的,但采用某个标准比不采用任何标准要好。 第16章“防止bug”讲解了开发人员为了便于找到和修复bug而采取的步骤。这些方法在大型复杂应用程序中至关重要。本章讨论了Try Catch Finally块的缺点,讲述了处理它们的方法。同时还讨论了使用应用程序级事件来查找所有应用程序的错误的方法,以及允许程序记录和从错误中恢复的高级方法。 第17章“测试”解释了高级调试和测试方法。讨论了黑盒、白盒和非常情况测试,讨论了回归、例程、模块和综合测试,讲述了评估项目质量的方法,讨论了免费的NUnit测试工具及它如何应用于测试驱动的方法,以及内置在Visual Studio 2005 Team System中的单元测试支持。 第18章“部署”解释了Visual Basic 2005应用程序现有的开发策略。讨论了将新模块和脚本加载到以前编译的应用程序中来提供扩展性的方法,还讨论了使用串行化以允许向前和向后兼容的方法。 第IV部分:具体技术 这一部分的几章讲解了具体的高级技术,这些技术在许多应用程序中都有用。前几章解决的是一般设计和开发问题,而这几章将讨论处理具体任务的方法,这些任务在许多开发项目中都会产生。 第19章“闪屏”讲解了快速建立令人印象深刻的闪屏和About对话框的方法。讨论了创建成形表、旋转文本和到 Web 页面的链接等方法。虽然这可能是本书中最不高级(但最有趣)的一章,但是该主题也应该引起足够重视。闪屏和About对话框是一些最基本的方法,运用这些方法可以使用户和客户与应用程序互动,因此它们奠定了基础。好的闪屏显示了您对应用程序的热情,可以让用户知道您关心程序的细节问题。 第20章“打印”讲解了用Visual Basic .NET打印的方法。讨论了使用标准的.NET打印技术封装页面上的文本及让文本围绕对象流动的方法。同时讨论了更自然的过程化打印方法,对于绝大多数开发人员而言这种方法更直观,它可以显示一些内容,例如逐页计数,而使用标准的.NET打印模型则难以显示这样的计数。 第21章“线程”讲解了如何使用Visual Basic 2005提供的新增线程工具。随着计算机硬件速度逐渐稳定,多线程是提高应用程序性能最好的方法之一,但是它也有其自身的风险和前提。本章讨论了多线程应用程序的一些问题,例如对用户界面线程的访问权限和并发问题。 第22章“反射”讨论了Visual Basic .NET最强大的特征之一:反射。讨论了程序如何使用反射来了解使用自己代码及其他程序集的模块、对象、属性和方法。讨论了程序使用反射加载模块的方法,这些模块是在编译应用程序后编写的。 第23章“内存管理”讨论了内存管理问题。介绍了垃圾收集器,讨论了如何执行和调用Dispose方法,以及使用弱内存引用来改进内存管理的方法。 使用本书的方法 使用本书有两种明显的方法。首先,可以一页一页地看。按本书最自然的顺序阅读:设计、元开发、开发和具体技术。 其次,可以直接阅读感兴趣的主题。如果要构建一些自定义控件以进行文本框中数据的有效性验证,可以阅读第10章“自定义控件与组件”。 在开发过程中如果能记住本书中描述的多种方法,会很有帮助。从您已经写出的代码上很难再产生出好的编程实践,因此,在需要它们之前,您应该阅读相关章节。最起码要将整本书都浏览一遍,这样您就会知道讨论了什么主题。从而,当您准备进入新的开发阶段时,就会知道哪一章包含了需要您仔细研究的重要信息。 使用本书的条件 要阅读本书并理解其中的示例,不需要特别的东西。甚至不需要Visual Basic,其中许多技术也适用于其他语言。 要使用Visual Basic .NET并运行本书的Web页面上的示例,只需一台可以运行Visual Basic .NET的计算机就行了。这意味着要有一台相当现代、内存较大、速度较快的计算机。 请参阅Visual Basic .NET文档了解Microsoft的确切要求和建议。 要构建Visual Basic .NET程序,需要一个Visual Basic .NET的副本。本书显示的示例都在Windows XP环境下使用Visual Basic 2005编写而成并经过了测试,但在较老的操作系统或Visual Basic .NET的较早版本中,绝大部分示例稍做修改或不做修改也可以运行。有些程序可能无法在Vista 操作系统中运行。访问本书的Web站点,可以找到更新的与Vista兼容的示例。 很多Visual Basic 2005版本Visual Basic .NET 2003及与Visual Basic .NET的较早版本都兼容,因此可以创建不少能在Visual Basic .NET较早版本中运行的示例。但是,不能加载从本书Web站点下载的示例程序。您需要将代码的重要部分复制、粘贴到Visual Basic .NET版本中,并做一些修改。如有疑问,请发电子邮件到RodStephens@vb-helper.com,笔者将尽力为您提供指导。 要使用Visual Basic的.NET之前的版本(例如Visual Basic 6)来运行示例会遇到许多麻烦。Visual Basic 6 与Visual Basic .NET之间的差别很大,许多Visual Basic .NET概念不能转换到Visual Basic 6中。如果有一些C#的经验,将程序转换到C#中可能会容易些。 要与作者探讨或进行同行讨论,请加入的P2P论坛。该论坛是一个基于Web的系统,您可以发布与Wrox书籍及其相关技术有关的帖子,可以与其他读者及技术用户进行交流。该论坛具有订阅功能。有新的帖子时,它可以将您选择的感兴趣的主题用电子邮件发送给您。这个论坛上有Wrox的作者、编辑、其他行业专家及您的读者朋友。 在上您会发现许多不同的论坛,在您阅读本书时,甚至是在您开发自己的应用程序时它们都可以为您提供帮助。要加入论坛,请按下面步骤操作: (1) 登录 ,单击Register链接按钮。 (2) 阅读使用条款,单击Agree按钮。 (3) 填写好加入论坛所需的信息以及您希望提供的所有可选信息,单击Submit按钮。 (4) 您会接收到一条电子邮件信息,这条信息提供了确认账户、完成加入过程的方法。 提示: 不用加入P2P,您也可以阅读论坛上的消息。但是要发帖子,则必须加入。 加入之后,就可以发新帖子,回复其他用户的帖子。在Web上,任何时候您都可以阅读论坛上的消息。如果您想让特定论坛上的新消息通过电子邮件发送给您,请单击论坛列表中论坛名上的Subscribe to this Forum图标。 要了解如何使用Wrox P2P的更多信息,请阅读P2P FAQ(常见问题)中相关问题的回答。里面有关于论坛软件如何运行的问题,以及许多针对P2P和Wrox书籍的常见问题。要阅读FAQ,请单击任意P2P页面上的FAQ链接。 本书的Web站点 在本书的Web站点上,您可以: ● 下载本书中的示例 ● 下载其他Visual Basic编程示例 ● 查看更新和修订 ● 连接到本书的Wrox讨论群 ● 阅读其他读者的评论和建议 本书是在Windows XP环境下用Visual Basic 2005所写。本书的Web站点包含了所有示例的修改,以便这些示例能够在Vista操作系统中运行。 如果您有自己的修正或评论,请发送给笔者,电子邮件地址为RodStephens @vb-helper .com,笔者将尽力使Web站点保持最新。 只要订阅笔者在上的3个新闻列表之一,就可以收到有关Visual Basic编程的每周提示、技巧和示例。笔者在这些新闻列表中会发布所有更新,因此,如果您订阅了,就会知道何时有更新。