内容简介 本书分析了逻辑的和物理的应用程序体系结构,探究了它们对可伸缩性、容错性和性能产生的影响,本书实现了一个用来创建分布式、面向对象应用程序的架构。此架构使用了包括remoting、串行化和自动部署等的.NET技术,封装了数据库访问、事务处理和位置透明性等功能,基于它创建的任何应用程序都自动继承这些功能。本书还使用这个架构创建了一个具有多个不同接口的示例应用程序。本书适合有一定经验的中高级.NET程序员,尤其是面向VB.NET的开发人员。
前 言 本书使用面向对象的概念,介绍了基于.NET的应用程序体系结构、设计和开发。我们还将特别开发面向业务的对象—— 业务对象,并在包括Web、客户-服务器配置的各种分布式环境中实现它们。为此,将使用大量的.NET技术、面向对象设计和编程的思想,以及分布式体系结构。 在本书的前半部分,将介绍创建一个支持.NET中面向对象应用程序开发的架构的全过程。这将包含许多体系结构的概念和思想。在创建这个架构时,还会使用一些有深度的高级.NET技术。 在本书的后半部分,将使用这个架构来创建一个具有多个不同接口的示例应用程序。如果读者愿意,可以跳过本书的前半部分,只简单地使用这个架构来创建面向对象的应用程序。 创建这个架构的主要目的在于简化.NET的开发。使用这个架构的开发人员不必担心底层技术的细节,例如远程控制,串行化,或者自动部署。所有这些技术都嵌入在架构之中,因此使用它的开发人员可以将注意力集中在业务逻辑和应用程序设计上,而不必在“管道(plumbing)”问题上花费过多精力。 从COM到.NET 本书是作者在两三年前为Wrox出版社编写的Professional Visual Basic 6 Business Objects和Visual Basic 6 Distributed Objects的续著,从这本书可以看到同样功能强大的技术是如何应用在.NET中的。 有关Visual Basic 6的书讨论的都是如何通过面向对象技术,使用VB6、COM、DCOM和COM+来创建应用程序(至少这些书尽可能在VB6和COM中使用面向对象技术)。它们也涉及分布式对象的概念,即某个对象在一个n层物理环境中分布于多台计算机上。在COM中,这不太容易实现,因此这些书都使用了较多篇幅来讨论与对象状态和状态串行化相关的技术。 最终的结果是一个被作者称为CSLA的体系结构,一个基于组件的、可伸缩的逻辑体系结构。几年来,作者收到了上百名读者的e-mail,他们都曾使用 CSLA作为自己体系结构的基础。他们所构建的应用程序从小型的单用户程序,到成熟的、运作他们业务主要部分的企业应用程序,几乎涵盖了所有的开发规模。 同样作者也收到了十几封读者的e-mail,他们称CSLA的使用并不成功,但这并不出乎意料。为了有效地使用CSLA,我们必须精通面向对象和基于组件的设计,理解分布式对象的概念,并开发具有其他技能的主机。分布式对象体系结构有很多好处,但它不是最简单的,也不是最易于理解的。 在过去两年中,作者也不断地收到一些e-mail,询问关于业务对象书籍的.NET版本。自从作者第一次接到.NET Framework的一个早期的准工作版本开始,就开始思考如何使用.NET设计一个分布式的、面向对象的体系结构。很快,作者就发现从COM到.NET的转变非常之大,以至于在有足够时间确定自己的思想已经成熟,并找到正确的途径用.NET实现它们之前,作者不能开始本书的编写。 设计CSLA.NET .NET的一个特性就是它通常为解决同一个问题提供了多条途径。某些可用的方法可能优于另外一些方法,但哪个方法最好却不一定能很快看出来。作者曾经花了很多时间尝试用各种方法来分布对象,其中的几个方法都被证明是有效的,但最终找到了与作者的初始目标最为匹配的那个方法。 在讨论那些目标之前,作者想提一下在写本书之前困扰作者的一个问题,这很重要。因为.NET在处理事情的方法上与COM有很大的不同,作者发现自己竟然可以选择编写两种截然不同类型的业务对象的书。 第一种选择是写一本书来说明如何在.NET环境下转换或实现基于COM的CSLA。这对于那些已经基于这种体系结构建立了VB6应用程序的人来说是有用的。遗憾的是,它并不能真正体现如何使用.NET的功能,因为这类书将集中讨论在.NET环境下应用基于COM的概念。 另一种选择是写一本书说明如何使用.NET建立分布式对象的应用程序。这对于希望在.NET环境中创建面向对象应用程序的任何人来说都是有用的,并且可以说明如何充分地利用这种新技术。 最后,作者决定采用第二种选择,并创建一个完全基于.NET的分布式对象体系结构,利用.NET提供的所有功能。对于那些想将他们的VB6应用程序转换成.NET应用程序的读者,可以参考作者的Web站点上的一些文章,这些文章提供了什么是完成这个工作的最好途径。对于这些VB6用户,本书也同样有用,因为本书同样使用了面向对象和基于组件的概念,并说明了这些工作在.NET环境下如何比在COM环境中更容易实现。 在开始研究和写作时,作者为基于.NET的应用程序体系结构和整本书制定了一套目标。这些目标很重要,因为它们对于从使用.NET技术的角度理解作者为何做出那些选择很关键。这些目标包括: ● 支持一个完全面向对象的编程模型 ● 让开发人员使用这个体系结构时不用在各种概念间跳来跳去 ● 支持高度的可伸缩性 ● 支持高性能 ● 提供原始CSLA的所有功能和特性,例如: ◊ 基于每一个对象的n级撤销操作(编辑、取消、应用) ◊ 违反业务规则的跟踪 ◊ 支持基于同一个对象的多种类型的UI ◊ 与MTS/COM+集成以支持事务 ● 处理诸如串行化和远程控制等复杂问题,以简化.NET ● 可以使用Microsoft提供的工具,例如VS.NET中著名的IntelliSense和自动实现功能 这其中可能产生最大影响的目标恐怕就是使开发人员不必在各种概念之间跳来跳去这一点了—— 也就是说,让开发人员能“正常”地编程。在基于COM的CSLA中,开发人员需要编写很多额外的代码来跟踪业务规则,实现n级的撤销操作,并支持对象数据的串行化。所有这些代码都是重要的,但这对应用程序的业务价值却毫无作用。 幸运的是,.NET提供了一些强大的技术,帮助我们减少或消除多数的“管道”代码。在几个案例中,作者在体系结构上所做的决定都是由这个目标驱动的。最终的结果是开发人员在大多数情况下都可以简单地编写一个普通的Visual Basic .NET类,并让它自动享受n级撤销操作、业务规则跟踪以及其他一些功能所带来的好处。 这些都花费了作者很多的精力和时间,但作者很愿意将这个体系结构和本书放到一起,并且希望读者能在开发自己的应用程序中发现它的价值。 本书主要内容 本书涉及到CSLA.NET体系结构背后的思考过程,描述了支持这个体系结构的架构的建立,并验证了如何使用这个架构来创建Windows Forms、Web Forms和基于业务对象的XML Web服务应用程序。 第1章,分布式体系结构。围绕分布式体系结构的概念进行了介绍,包括逻辑和物理的体系结构,业务对象和分布式对象。更为重要的是,这一章搭起了展现本书后续部分思想过程的舞台。 第2章,架构设计。使用第1章描述的体系结构作为代码架构的起点,这个架构使得上述目标可能实现。最后,将介绍在第4和第5章中实现的对象设计过程,在这之前,我们还将完成一些其他的工作。 第3章,关键技术。对用来实现架构和应用程序的.NET技术进行了一个快速预览。其中的每一项技术都有专门的书籍对之进行深入讨论。但在本书中,将专注于将这些技术放到一起并展现它们如何成为一个更大整体的一部分。在第3章,将介绍每一种技术,并讨论如何在书的后续部分使用它们。 第4章,业务架构的实现,和第5章,数据访问与安全性,讨论了关于架构本身构造的所有问题。如果您对于n级撤销操作、对象分布、自动部署和对象持久性背后的代码感兴趣,那么这章就特别适合您。这两章还涉及到.NET架构更高级和更有趣的部分,包括remoting技术、串行化、反射技术、.NET安全性、企业服务、强命名程序集、动态加载的程序集、应用程序配置文件等。第3章为这些技术提供了简短的介绍,但在第4和第5章中将利用它们来创建架构。 本书的其余部分集中于使用这个体系结构和架构创建一个应用程序。即使您对于第4章和第5章讲述的低层.NET概念不十分感兴趣,也可以通过阅读第6~10章的内容学会用.NET业务架构来创建应用程序。 第6章,面向对象的应用程序设计。将讨论示例应用程序的需求并创建它的数据库。我们将使用SQL Server,并通过创建表和存储过程来获取和更新数据。 第7章,业务对象的实现,我们将为应用程序创建业务对象。本章真正讲述了这个架构是如何快捷地为应用程序创建一个强大的业务对象集的。最终的结果是一个对象集,它不仅为我们建模了业务实体,而且支持第1章中所描述的n级撤销操作和各种各样用来优化性能、可伸缩性、安全性和容错性的物理配置。 第8章,Windows Forms UI。将讲述如何为业务对象创建Windows Forms界面。第9章,Web Forms UI,将讲述具有可比较功能的Web Forms或ASP.NET界面。第10章,Web服务接口,将使用XML Web服务为我们的应用程序提供一个可编程界面,任何SOAP客户都可以调用它。 本书的大部分内容主要介绍OLTP(online transaction processing,联机事务处理)形式的应用程序和支持这类型应用程序的对象模型。无论如何,为了制作报表或对非常大的数据集进行操作,我们需要使用不同的设计模式,需要调整或重新设计对象模型。将在第11章“报表与批处理”中讨论其中的一些内容。 最后,您将从实际、实用的角度得到一个支持面向对象应用程序设计的架构。这个架构实现了一个逻辑模型,可以把它部署到不同的物理配置中来最优地支持Windows、Web和Web服务客户。 使用本书的条件 本书的代码在Microsoft Visual Studio .NET专业版和Microsoft Visual Studio.NET 2003专业版环境下已经过了验证。也就是说,在.NET Framework 1.0版和1.1版中已经过了验证—— 任何需要修改的代码都在文本中作了标注。Visual Studio .NET企业版和SQL Server完全版对本书是有益的,但并不是必需的;后续章节中的数据库操作可以由MSDE来完成,但缺少IDE的许多辅助功能。 基于以上的描述,您至少需要一台安装有Windows 2000或Windows XP专业版的PC机。当然,为了测试CSLA.NET对于多物理层的支持,还需要一台额外的计算机来实现所需添加的每一层。 用户支持 我们一贯重视读者的意见,并想知道每位读者对本书的看法,包括读者喜欢和不喜欢的内容,以及读者希望我们在下一次完善的地方。您可以通过发送电子邮件(地址为feedback@)来向我们反馈意见。请确保在反馈信息中提到本书的书名。 如何下载本书的示例代码 当您访问Wrox出版社的站点(地址为/)时,通过Find a Book工具,可以方便地定位需要的书目。打开本书的详细信息页面之后,单击Download Code超链接就可以下载相应的示例代码。另外,单击Wrox主页顶部的Download Code超链接,然后在书目文本框中选择本书书名即可。 在下载本书代码之前,您可通过提供自己的姓名和当前可用的email地址来注册本书。这只是一个可选步骤,不通过它也可以下载本书代码。不过,提供注册信息有利于我们向您提供本书源代码的升级版本和新版本。我们确保您的注册信息不会泄漏给第三方。关于这方面的详细的条款,可以通过单击下载页面上的Privacy Policy超链接来查看。 从我们的站点上下载的可用文件都是使用WinZip压缩过的文档。把附件保存到本地磁盘上的文件夹中后,需要使用一个解压缩程序(例如WinZip或PKUnzip)来解压缩文件。在解压缩文件时,通常将代码解压缩到每一章所在的文件夹中。在解压缩的过程中,应确保解压缩程序被设置为使用原有文件夹名。 勘误表 尽管我们已经尽最大努力确保本书中的文本和代码没有错误,但是错误仍然在所难免。如果您发现本书存在错误,例如拼写错误或不正确的代码段,请反馈信息给我们,我们将不胜感激。勘误表的发送可以节约其他读者学习本书的时间,而且能够帮助我们提供更高质量的信息。请将您的反馈信息以电子邮件的形式发送到support@,它们将被检查,如果正确,将被粘贴到本书的勘误页面上,或者在本书的后续版本中使用。 要在我们的站点上找到勘误表,请访问/,并通过Find a Book搜索框轻松定位本书页面。然后,单击View Errata超链接即可看到与本书有关的所有勘误列表,该链接位于本书的详细页面中的封面图解下面。 E-mail支持 如果您希望直接向详细了解本书的专家咨询本书中的问题,可以发送电子邮件到support@。一个典型的电子邮件应包括下面的内容: ● 在Subject栏中必须有本书的书名、ISBN的后4位数字和问题所在的页码。 ● 正文部分应包括读者的名字、联系信息和问题。 我们将不返回无用邮件,因为我们仅仅需要有用的详细资料,以便可节约您和我们的时间。当您发送一个电子邮件信息时,它将经过下面一系列支持: ● 客户支持:首先,您的信息将被递送到我们的客户支持人员手中,并由他们阅读。对于一些被频繁提到的问题将被归档,并将立即回答有关本书或者Web站点的任何常见问题。 ● 编辑支持:接着,一些有深度的问题将被送到对本书负责的技术编辑手中,他们在程序设计语言或者特定的产品上有着丰富的经验,能够回答相关主题的详细技术问题。 ● 作者支持:最后,如果编辑不能回答您的问题(这种情况很少发生),他们将请求本书的作者。我们将尽量保护作者免受干扰,以便不影响其写作。然而,我们也非常高兴转寄给他们一些特殊的问题。所有Wrox公司的作者都为他们的书提供技术支持。作为回应,他们将发送电子邮件给用户和编辑,进而使所有的读者受益。 Wrox公司的支持过程仅仅对那些与我们出版的书目内容直接相关的问题提供支持,对于超出常规书目支持的问题,您可以从/论坛中的公共列表中获得支持信息。 站点 为了便于作者和其他人讨论,特将编程人员加入到P2P站点的邮件列表中,而且我们惟一的系统将programmer to programmer™(由程序员为程序员而著)的编程理念与邮件列表、论坛、新闻组,以及所有其他服务内容(一对一的邮件支持系统除外)相联系。如果您向P2P发送一个问题,应该相信它一定会被登录邮件列表的Wrox公司作者和其他相关专家所检查到。无论您是在阅读本书,还是在开发自己的应用程序,都可以在站点中找到许多对自己有所帮助的邮件列表。 按照下面的步骤可以预订一个邮件列表: (1) 登录/站点。 (2) 从左边的菜单栏选择一个适当的类别。 (3) 单击您希望加入的邮件列表。 (4) 按照说明订阅并填写自己的邮件地址和密码。 (5) 回复您收到的确认邮件。 (6) 使用预订管理程序加入更多的邮件列表并设置自己的邮件首选项。 您可以选择加入到整个邮件列表,也可以只接收每周的邮件摘要。如果您没有时间和工具来接收邮件列表,可以直接查找我们的在线文档。当存在加入和离开列表,以及任何有关列表的其他常见问题时,请发送邮件到listsupport@。