本书描述了怎样应用面向对象的概念来进行.NET应用程序的架构、设计和开发。作者将重点放在了面向业务的对象,即业务对象和怎样在包括Web和客户机/服务器结构的不同分布式环境中来实现它们。本书使用了大量的.NET技术,面向对象的设计与编程思想,以及分布式架构。本书的前半部分叙述了如何在.NET环境创建这个框架来支持面向对象的应用程序开发的流程,后半部分应用这个框架创建了一个带有几个不同接口的示例应用程序,本书适合C#应用开发人员阅读。
关于作者 Ⅰ\r\n关于技术审阅者 Ⅲ\r\n鸣谢 Ⅴ\r\n本书简介 Ⅶ\r\n第1章 分布式架构 \r\n 1.1 逻辑架构和物理架构 \r\n 1.1.1 复杂度 \r\n 1.1.2 逻辑模型和物理模型的关系 \r\n 1.1.3 一个五层的逻辑架构 \r\n 1.1.4 逻辑架构的应用 \r\n 1.1.5 前景 \r\n 1.2 业务逻辑的管理 \r\n 1.2.1 业务逻辑潜在的位置 \r\n 1.2.2 业务对象 \r\n 1.2.3 移动对象 \r\n 1.3 架构与框架 \r\n 1.4 小结 \r\n第2章 框架设计 \r\n 2.1 基本设计目标 \r\n 2.1.1 N层撤销能力 \r\n 2.1.2 失效业务逻辑的跟踪 \r\n 2.1.3 对象是否变更的跟踪 \r\n 2.1.4 子对象的强类型集合 \r\n 2.1.5 用户界面开发的简单与抽象模型 \r\n 2.1.6 数据绑定的支持 \r\n 2.1.7 对象持久化与对象-关系影射 \r\n 2.1.8 自定义的身份验证 \r\n 2.1.9 集成的授权 \r\n 2.2 框架设计 \r\n 2.2.1 业务对象的创建 \r\n 2.2.2 N层撤销功能 \r\n 2.3 数据绑定的支持 \r\n 2.2.4 验证的规则 \r\n 2.2.5 数据门户 \r\n 2.2.6 定制的身份验证 \r\n 2.2.7 集成的授权 \r\n 2.2.8 工具类型与工具类 \r\n 2.3 名字空间的组织 \r\n 2.4 小结 \r\n第3章 业务框架实现 \r\n 3.1 创建CSLA.NET项目 \r\n 3.1.1 创建目录结构 \r\n 3.1.2 本地化的支持 \r\n 3.2 Csla.Core名字空间 \r\n 3.2.1 IBusinessObject接口 \r\n 3.2.2 IUndoableObject接口 \r\n 3.2.3 IEditableCollection接口 \r\n 3.2.4 IReadOnlyObject接口 \r\n 3.2.5 IReadOnlyCollection接口 \r\n 3.2.6 ICommandObject接口 \r\n 3.2.7 ObjectCloner类 \r\n 3.2.8 BindableBase类 \r\n 3.2.9 NotUndoableAttribute类 \r\n 3.2.10 UndoableBase类 \r\n 3.2.11 BusinessBase类 \r\n 3.2.12 ReadOnlyBindingList类 \r\n 3.3 Csla.Validation名字空间 \r\n 3.3.1 RuleHandler委托 \r\n 3.3.2 RuleArgs类 \r\n 3.3.3 RuleMethod类 \r\n 3.4.4 ValidationRules类 \r\n 3.3.5 BrokenRule类 \r\n 3.3.6 BrokenRulesCollection类 \r\n 3.3.7 ValidationException \r\n ……\r\n第4章 数据访问与安全 \r\n第5章 框架的完成 \r\n第6章 面向对象的应用程序设计 \r\n第7章 使用CSLA.NET的基类 \r\n第8章 业务对象的实现 \r\n第9章 Windows Forms UI \r\n第10章 Web Forms UI \r\n第11章 Web Services接口 \r\n第12 章 远程数据门户宿主的实现 \r\n索引
在朋友把这本书介绍给我的时候,我正在为一个项目中客户不断变化的需求而头痛不已,而实际上我的这个项目只是公司一大堆此类项目中的一个。
在现代的项目开发过程中,由于客户自身业务需求的快速变化而带来的对于软件需求上的变化越来越频繁。项目经理们所要面对的局面经常是固定的预算,固定的上线日期,加上频繁变化的需求这样的组合。这对于每一个精细业务定制软件的开发团队来说都是一个永恒的难题。当然从项目管理的角度我们需要通过客户管理和需求控制来避免这种情况的发生;但是另一方面,开发团队需要一套业务级别的实用软件框架来避免在客户需求发生变化的时候花时间重新搭建系统的业务平台,从而大大提高应对客户变化的能力以及自身的生产力。
坦白地讲,在此之前我对ROCKFORD LHOTKA的CSLA.NET知之甚少,甚至在开始的时候觉得这不过是一些底层代码的封装而已。然而在后来为本次翻译所作的必要准备、翻译的本身,以及后来实际的使用过程中,我对于这个业务框架的看法却经历了从不屑、接受,直到最后的推崇这样的变化。
CSLA.NET最诱人之处就是它应用了.NET中的很多特性,如远程访问、序列化、反射、企业服务、System.Transactions、强命名程序集、动态装载程序集和应用程序配置文件等等,来在业务级别上真正的实现了构建绝大部分业务应用程序所需要的框架,而这个框架可以被轻松的应用在包括Windows Forms、Web Forms和Web Services在内的各种应用程序中,同时保持了相对来说非常高的性能。更重要的是,它还可以在不修改源代码的情况下,被部署在不同的硬件配置环境下,比如从所有代码都在同一台电脑上执行变成一个三层架构,要实现这一切,你所要做的只是修改一个配置文件而已。怎么样,是不是有相见恨晚的感觉了?
除了那些常见的底层功能代码封装之外,这个框架在业务级别上所支持的功能也异常强大,包括业务逻辑的N层撤销、移动对象、业务规则跟踪、业务授权规则、同一个对象拥有多种用户界面、Windows和Web Forms的数据绑定,以及与分布式事务技术的集成等等。有了这个框架,业务应用程序开发人员只需要考虑将精力集中在业务需求上,而完全不必要在那些对于增加应用程序的业务价值没有丝毫帮助的代码上面浪费时间。相信看到这里有很多项目经理和技术主管已经在回忆上一次与此相关的痛苦经历了,不过现在有了这么强大的框架摆在你的面前,你可以和这个难题说再见了。更重要的是,它完全是免费的!
这本LHOTKA的力作描述了怎样搭建支持这个架构的框架,并且展示了如何使用这个框架来创建基于业务对象的Windows Forms、Web Forms和Web Services应用程序。虽然这本书通篇的内容都是关于LHOTKA的宝贝框架CSLA.NET的介绍,但是通过他全面而平台性的讲解,我们也可以从中提炼出CSLA.NET 2.0架构当中的思想过程,同时把它当作一本讲述在.NET平台上进行分布式架构的业务对象理论的书籍来参读。
随着微软Visual Studio 2005全系列产品的发布和.NET 2.0的广泛应用,.NET平台再次成为业务应用开发的焦点,特别是在业务逻辑频繁变化的行业领域,更是凭借其简短的学习路径,超高的生产力和灵活的应变能力而成为当仁不让的首选。而CSLA.NET则在这个计算平台上为我们提供了一个满足框架性业务操作的有力工具,有了它,我们在.NET上的开发过程是不是有一种如虎添翼的感觉呢?
亲爱的读者朋友,希望这本书能对您的项目有所帮助,最后祝您编码顺利!
王鑫
2007年3月
ROCKFORD LHOTKA是一位著有大量书籍的作者,其中包括那本Expeert VB 2005 Business Objects。他是微软的地区总监,微软最有价值专家和INETA的发言人。ROCKFORD在全世界无数的会议和用户组中发表演讲,并且他还是MSDN在线的一位专栏作者。除此之外,ROCKFORD是Magenic Technologies(WWW.magenic.corn)的首席技术官,MagenicTechnologies是微软在美国最重要的金牌授权合作伙伴之一,致力于使用自分之百来自微软的工具和技术来解决当前最具挑战性的业务问题。
这本书描述了怎样应用面向对象的概念来进行.NET应用程序的架构、设计和开发。我把重点放在了面向业务的对象,即业务对象,以及怎样在包括Web和客户机/服务器结构的不同分布式环境中来实现它们。本书使用了大量的.NET技术,面向对象的设计与编程思想,以及分布式的架构。
本书的前半部分叙述了如何在.NET环境创建这个框架来支持面向对象的应用程序开发的流程。这其中包含了大量的架构概念和思想,还有一些比较深入的高级.NET技术。
本书的后半部分应用这个框架创建了一个带有几个不同接口的示例应用程序。如果你愿意,你完全可以跳过本书的前半部分,直接使用这个框架来搭建面向对象的应用程序。
我创建这个CSLA.NET框架的一个主要目的就是为了简化.NET开发。本书中使用该框架的开发人员无须关心底层的技术,如远程访问、序列化或反射的这些细节。所有的细节都被内建在框架当中,这使得使用框架的开发人员可以集中几乎所有的精力来关注业务逻辑和应用程序设计,而不是整天陷在那些琐碎的“管道连接”的问题里。
从.NET 1.0到2.0
本书是对上一版Expert C# Business Objects的一次主要修订。修订本主要加入了.NET 2.0的新特性,以及应用了过去几年使用.NET 1.0和1.1所学到的知识。
这本书几乎与Expert VB 2005 Business Objects那本书一模一样,唯一的区别就是这两本书使用的编程语言的语法不同。
这两本VB和C#的书都体现了我在近十年的时间里研究的概念思想。我一贯的目标就是在分布式N层应用程序中实现高效的面向对象的设计。在这几年里,业界的技术、我对此的理解和对概念的表达都发生了极大的变化。
作为尝试分布式过程先驱的那些VB5和VB6的书籍描述了怎样使用VB、COM、DCOM、MTS和COM+来创建面向对象的应用程序(或者至少它们尽可能地实现了用VB5/6和COM所能实现的面向对象)。它们还涉及分布式对象的概念,即给定的对象遍布在一个物理N层环境中的多台主机之间。在COM中,分布式对象很重要,所以这些书籍进行了大量的关于对象状态和状态序列化技术的讨论。
最后我写出了被我叫做CSLA的一个架构,意为基于组件的可扩展的逻辑架构。几年中,我收到了上百封使用过CSLA的人给我发来的电子邮件,这些人把CSLA作为他们的应用程序的基础架构,这些程序中既有很小的单用户程序,也有支撑他们核心业务的大型企业应用。
在.NET中,分布式对象的概念已经让位给了一个更好的想法——移动对象,就是说对象可以在一个N层环境中的计算机之间移动。在高级层面上来看,这与分布式对象是类似的,但是移动对象提供了一个在分布式环境中实现面向对象设计更强大的方法。
我还收到了相当多的电子邮件,说CSLA.NET不是很成功,这一点儿也不奇怪。要想有效地使用CSLA.NET,你必须精通面向对象和基于组件的设计,理解分布式对象的概念,并且拥有其他大量的技能。移动对象架构有很多好处,但不是很好理解。
设计CSLA.NET
.NET的一个特点就是它经常提供多种方法来解决相同的问题。一些方法比另外一些要好,但是不一定马上就能找到给定问题的最好方法。在写那些.NET 1.0的书的时候,我花了很长时间尝试着用不同的方法来实现分布式对象。尽管知道有多种方法能行得通,但是在最后我还是找到了最符合我最初目标的那种方法。
在我讨论那些目标之前,我想很有必要来谈谈另一个令我在写这本书的时候冥思苦想的问题。假设有很多的人使用了本书的上一个版本中的概念和代码,我想在任何可能的时候保留向后兼容的能力。同时,这本书的新版提供了一个好机会,来使得我们在应用.NET 2.0的新特性的同时,应用过去几年中通过使用.NET学到的东西。
应用学到的东西就是说要应用新的概念和代码,这需要修改已经存在的业务对象和用户界面代码。我是不接受弱向后兼容性的,然而发展这些概念来适应在面向对象及分布式计算领域的技术和我的观念这两方面的变化非常重要。
在可能的情况下,我会尽量地把对已经存在的代码的影响控制到最小,以便对于大多数应用程序来说,所需要的转换不会过于复杂。
我对架构和本书有一套详尽的目标。这些目标非常重要,因为它们对理解为什么我准备了许多种选择很关键,例如使用哪种.NET技术和如何使用它们。这些目标有:
支持完全的面向对象编程模型
允许开发人员无障碍地使用架构
实现高可扩展性
实现高性能
提供CSLA旧版的所有功能和特性,如:
为每个对象实现N层撤销(编辑、取消和应用)
验证规则的管理
授权规则的管理
支持同一个对象拥有多种用户界面
支持Windows和Web Forms的数据绑定
与分布式事务技术的集成,如企业服务和System.Transactions
通过处理如序列化、远程访问和反射这样复杂的问题,来简化.NET开发。
使用微软提供的工具,特别是Visual Studio.NET中的智能感应和自动完成。
在这其中,允许开发人员无障碍地使用架构,也就是说让开发人员“正常”地编程,对新版本的冲击可能最大。要想在没有框架的情况下达到这个目的,开发人员需要编写大量额外的代码来跟踪业务规则,实现N层撤销和支持对象数据的序列化。所有这些代码非常重要,但是对增加应用程序的业务价值没有丝毫的帮助。
幸运的是,.NET提供了一些强大的技术来帮助减少或消除这样的“管道连接”代码。有了这些打包在框架里的技术,业务开发人员就根本不必为这些事情操心。简化代码这个目的有好几次决定了我如何设计架构。最后,这个框架在极大程度上实现了简化代码,开发人员只需要写出所需要的业务C#类,然后就可以从框架中自动获得例如N层撤销和业务规则跟踪这样诸如此类的所有好处。
虽然花了我大量的时间和精力,但是我确实很高兴将这个架构写成本书,而且我希望你们能在开发自己的应用程序的时候发现它的好处。
本书范围
本书包含了CSLA.NET 2.0架构中的思想过程,描述了怎样搭建支持这个架构的框架,并且展示了如何使用这个框架来创建基于业务对象的Windows Forms、Web Forms和Web Services应用程序。
第1章介绍了分布式架构的一些概念,包括逻辑的架构和物理的架构、业务对象,以及分布式对象。或许更重要的是,这一章搭建好了一个舞台来展示本书后面其余部分的思想过程。
第2章继续使用了在第1章末尾描述的架构来开始搭建能实现之前提出的目标的框架。在第2章结束的时候,你将会看到对象的设计过程,这些对象会在第4章和第5章被实现出来;但是在此之前还有一些事情要做。
从第3章到第5章全都是关于CSLA.NET框架自身的创建。如果你对那些实现N层撤销、移动对象的支持、验证规则、授权规则,以及对象持久化的源代码感兴趣,你可以好好看看这些章节。此外,这些章节还用到了.NET框架当中更高级和有趣的部分,包括远程访问、序列化、反射、.NET安全、企业服务、System.Transactions、强命名程序集、动态装载程序集和应用程序配置文件等。
此后,本书的其他章节集中在如何使用这个架构和框架来搭建应用程序。即使你不想学习从第3章到第5章包含的所有底层的.NET概念,你仍然可以阅读从第6章到第12章的这部分,使用这个框架来搭建基于这个框架的应用程序。
我在第6章中讨论了一个示例应用程序的需求,并创建了它的数据库。这个示例应用程序使用SQL Server,还有表和存储过程来返回和更新数据。
第7章描述了怎样使用CSLA.NET中的每一个主要的基础类库来搭建你自己的业务对象。你会看到实现可编辑对象和只读对象、集合,以及名/值列表的基本代码结构。
第8章为应用程序创建业务对象。本章描述了你可以如何使用本框架来迅速容易地为一个应用程序搭建一套强大的业务对象。最终目的就是创建一套对象,来不仅对业务实体建模,而且提供对N层撤销、数据绑定、能优化性能的多种物理配置、可扩展性、安全性,以及容错能力的支持,就像在第1章讨论的那样。
第9章演示了如何为业务对象创建Windows Forms接口。第10章讲述了用类似的功能创建Web Forms或ASP.NET接口。
第11章使用了Web Services来提供一个业务对象的编程接口,供Web Services客户端调用。
最后,第12章讲述了如何使用.NET Remoting、企业服务和Web Services来配置应用服务器。这些应用服务器支持CSLA.NET框架,并且可以互换地使用那些在从第8章到第11章创建的Windows Forms、Web Forms和Web Services应用程序。
在本书结束之前,你会得到一个实用的支持面向对象应用程序设计的框架。这个框架实现了一个可以在不同物理配置上部署的逻辑模型,来最好地支持Windows、Web和Web Services的客户端。
框架软件许可
许可与担保
Rockford Lhotka拥有CSLA.NET框架的所有版权。
你可以将本软件用于任何非商业目的,包括与之派生出的工作。
你也可以将本软件用于任何商业目的,但是你不能将本软件全部或部分地用于创建一个商业的框架产品。
简言之,你可以使用CSLA.NET,做出任意的修改来创建其他的商业或业务软件,你唯一不能做的就是把
无封面