CSLA .NET是一个.NET软件开发框架,帮助开发者“为Windows、Web、面向服务和工作流等应用构建强大和可维护的业务逻辑层”。
CSLA是Component-based, Scalable, Logical Architecture的简写,CSLA . NET是Rockford Lhotka基于.Net设计的一套N-tier分布式框架。
框架软件许可协议:
你可以将本软件用于任何非商业目的,包括与之派生出的工作。你也可以将本软件用于任何商业目的,但是你不能将本软件全部或部分地用于创建一个商业的框架产品。......
协议非常像BSD,不禁止商业使用。但是不能直接拿这个框架去卖钱。
http://www.lhotka.net/cslanet/download.aspx
我一直热衷于框架。作为专业开发人员,20多年以来,我从没发现一个计算平台能够提供我需要的所有东西,让我高效地构建应用程序。微软的.NET平台非常好,但也并不总是能完全如我所愿。为了满足自己的需要,我一直在寻找工具和框架,有时不得不自己创建。
框架仅仅是架构或设计模式的集合。在有一个好框架之前,需要先有一个架构。这意味着你需要对架构和在其上可以创建的应用程序的种类都有一定的设想和目标。
本书介绍怎样应用面向对象的概念进行.NET应用程序架构的设计和开发,重点介绍如何在包括Web和C/S结构的各种分布式环境下创建业务对象并加以实现,书中使用了大量的.NET技术、面向对象的设计和编程概念以及分布式架构。
本书的很大一部分是我设计和创建CSLA.NET框架的思考过程,这个框架用来支持面向对象的.NET应用程序开发。它包括很多架构的概念和思想,也包括一些创建框架所使用的.NET高级技术的深度应用。
本书也演示了如何使用这个框架构建一个带有多种接口的示例应用程序。如果你愿意,完全可以跳过框架设计章节,直接使用框架构建面向对象的应用程序。
我创建CSLA.NET框架的一个主要目的是为了简化.NET开发。开发人员使用本书中介绍的框架,无需考虑底层的技术细节,例如远程访问、序列化或者反射。所有这些功能都被内建在框架中,所以使用它的开发人员几乎可以完全专注于业务逻辑和应用程序设计,而不必再为底层技术细节劳神费力。
本书对上一版本(Expert C# 2005 Business Objects)做了重大修改,加入了.NET 3.5的新特性,并应用了过去几年里.NET 2.0和3.0所做的改进。
本书是我过去10多年所使用的概念的最新表述。我的目标一直是在分布式多层应用程序中高效地使用面向对象的设计。在这些年中,无论是技术还是我对这些概念的理解和表述都有了巨大的进步。
从CSLA .NET 2.0到3.6
在过去的8年中,CSLA.NET框架成为了微软.NET平台上最广泛应用的开发框架之一。自从我在2001年发布了.NET版本,这个框架已经成熟和改进了很多。这要归功于.NET平台自身的变化以及CSLA.NET社区的活跃和积极贡献。
CSLA.NET是一个被我称为CSLA的底层架构的映射,从而成为一个基于组件的、可扩展的逻辑架构。在过去的几年中,我收到了上百封邮件,它们来自于使用CSLA作为其架构基础的开发人员。这些开发人员创建了各式各样的应用程序,小到单用户程序,大到支撑核心业务的大型企业应用程序。
这个框架包括面向对象软件开发的两个主要领域:
如何使用业务对象高效地构建Windows、Web和面向服务的应用程序;
如何在分布式计算环境中使用面向对象设计。
虽然.NET支持对象的使用,但对象的作者还是要完成大量的工作才能完全支持重要的.NET概念,例如数据绑定。CSLA.NET和本书十分关注如何使对象完全支持数据绑定,以及其他的重要概念,如验证和授权。对于CSLA.NET的大多数使用者来说,这些都是框架所提供的主要优点。
很多开发人员都在构建分布式多层或面向服务的应用程序。在分布式环境中使用面向对象设计和业务对象,有一些需要解决的难题。CSLA.NET使用多种技术克服这些难题。对于多层C/S应用程序,框架支持移动对象(mobile object)的概念,这些对象确实是在多层环境中不同计算机间移动。移动对象提供了一种在分布式环境中实现面向对象设计的强大方法。对于面向服务的应用程序,CSLA.NET既可以用来构建服务,也可以用来构建边缘应用程序。框架通常用来创建边缘应用程序,但对创建服务或工作流中的活动也经常会有帮助。
因为.NET平台和CSLA.NET框架的改进,所以我进行了大量的修改并加入了很多新特性。在一些情况下,使用新概念和特性需要修改已有的业务对象和用户界面代码。我不会轻易地采取向下兼容,重要的是推进概念的发展,以跟上技术和我关于面向对象和分布式计算的观点的发展。
如果可能,我会尽量降低对现有代码的影响,因此多数应用程序变化不会非常复杂。虽然从3.0版本到3.6版本有一些重大变化,但大多数现有代码很容易升级。即使是2.1版本的代码升级也会相对简单。使用CSLA.NET 1.x或者2.0编写的业务对象在升级时会需要做更多的工作。
过去的几年中,我还收到了一些邮件,说CSLA.NET不是很成功,这并不奇怪。要想有效地使用CSLA.NET,你必须精通面向对象设计,理解移动对象的概念,并加强一系列其他的技能。移动对象架构有很多优点,但它并不是最简单和最容易理解的。
然而,在同一时间内,我也收到了不计其数的由于使用CSLA.NET构建应用程序而取得巨大成功的开发人员发出的邮件。这些应用程序从Windows到网页,从小型到企业级,从零售业到制造业再到军事系统。收到这么多邮件,得知CSLA.NET帮助了全世界这么多的机构和个人,我感到震惊和喜悦,而对于那些盛赞我自愧不如。
.NET的一个特点是它经常提供多种方法解决同一个问题。这些方法有的很好,有的一般,但对于特定问题的最优方法可能并不是显而易见的。在过去的8年中,我花费了很多时间研究其中的大量可选择方案和技术。虽然很多方案都被证明可以完成任务,但最终我会找到满足要求的最佳方案。
对于架构和这本书我有一系列特定的目标。这些目标很重要,因为它们对理解为什么我准备了许多选择很关键,例如使用哪种.NET技术和如何使用它们。这些目标如下。
支持完全的面向对象编程模型。
允许开发人员无障碍使用架构。
实现高度可扩展性。
实现高性能。
当开发人员使用业务对象时,保证开发效率,包括:
支持在Windows和Web Forms中的数据绑定;
支持同一个对象拥有多种用户界面;
验证规则管理;
授权规则管理;
基于每个对象的多级撤销操作(编辑、取消和应用);
与分布式事务技术(例如Enterprise Services和System.Transactions)集成。
通过应用移动对象,支持在分布式环境中使用面向对象设计。
通过处理序列化、反射和网络通信这样复杂的问题,简化.NET开发。
使用Microsoft提供的工具——尤其是Visual Studio .NET中的智能感应和自动完成功能。
其中,允许开发人员无障碍地使用框架(也就是让开发人员“正常地”编程)有可能影响最大。如果没有框架而要实现所有这些目标,开发人员必须编写大量额外的代码来跟踪业务规则、实现多级撤销和支持对象数据的序列化。所有这些代码都很重要,但它并没有增加应用程序的业务价值。
幸运的是,.NET提供了一些强大的技术帮助减少或消除这样的“管道连接”代码。如果这些技术被封装在框架中,那么业务开发程序员就完全不需要处理它们了。在一些情况下,架构上的决策是为了追求简单的目标。最终结果是开发人员可以在多数情况下,只是简单地编写标准的C#类,就可以使它享受到所有诸如多级撤销、业务规则跟踪之类的好处。
虽然将这个架构和这本书结合到一起花费了我很多时间和精力,但是我很享受这个过程。我也希望你能在开发应用程序时发现它们的价值。
框架软件许可
许可和担保
Rockford Lhotka拥有CSLA .NET框架的所有版权。
你可以将本软件用于任何非商业目的,包括分发修改版本。
你也可以将本软件用于任何商业目的,但不能将它全部或部分地用于创建一个商业框架产品。
简单地说,你可以使用CSLA.NET并做出任意的修改来创建其他商业或业务软件,但是不能将框架本身或其修改版本作为产品销售。
作为交换,框架的作者也要求你同意以下约定。
本软件许可协议(简称协议)自你使用CSLA.NET(简称软件)之日开始生效。
(1) 所有权。美国明尼苏达州Eden Prairie市的Rockford Lhotka拥有CSLA.NET框架的所有版权。
(2) 版权声明。你不能从软件源代码中去掉任何版权声明。
(3) 许可。软件所有者授予在本协议中阐明的软件永久的、非排他性的、有限的使用许可。
(4) 源代码分发。如果你以源代码的形式分发本软件,你必须遵循本许可的规定(你必须将一份完整的本许可副本包含在分发的代码中)。
(5) 二进制或对象分发。在以二进制或对象形式分发本软件的时候,你不必向最终用户出示版权声明。但是二进制或对象的源代码中必须保留版权声明。
(6) 限制。你不能销售本软件。你也不能销售作为衍生品基于本软件创建的任何软件开发框架。这并不限制你使用本软件来创建其他类型的非商业或商业的应用程序或衍生品。
(7) 担保免责声明。本软件按现状分发,没有任何形式的担保。即没有任何明确的、暗示的、法定的或其他担保,包括无限担保、商品担保或特定目的的适用担保、不侵权担保或任何可发现与不可发现的错误的担保。你还必须在你以任何形式分发本软件的同时附上此免责声明。
(8) 责任。不管是Rockford Lhotka还是任何本软件的贡献者都在法律允许的最大范围内不对与本软件及其许可有关的任何间接的、特殊的、结果的、意外的、惩罚性的或警戒性类型的损失负有责任,无论基于任何法律基础。你还必须在你以任何形式分发本软件的同时附上此有限责任。
(9) 专利权。如果你对某人使用本软件提出专利权方面的诉讼,你的本软件使用许可自动终止。专利权,如果有的话,下文许可的只适用于本软件,而不适用于任何你的衍生作品。
(10) 权利终止。如果你以任何方式违反了本许可,那么你被本许可赋予的权利自动终止。Rockford Lhotka保留使用不同的许可条文来发布本软件,或随时中止分发本软件的权利。这样的选择权不会被用于收回本协议,而且本协议会继续保持全部效力,除非在上述情形下被终止。
(11) 适用法律。本协议遵守美国明尼苏达州法律。
(12) 不得转让。本协议和其中的任何权益必须在得到开发人员明确的书面同意后才能转让。
(13) 最终协议。本协议终止并代替之前所有的相关理解和协议。本协议可能在将来合适的时候由双方共同进行书面修改。
(14) 可分割条款。如果本协议中有任何条款被司法机构证明为无效或不能执行。那么本协议的其他条款将保持全部效力,就如那些无效或不能执行的条款从未被加入一样。
(15) 标题。本协议中使用的标题只是为了方便,不能用于理解含义或意图。
本书要求
本书中的代码已经使用Microsoft Visual Studio 2008专业版SP1和.NET Framework 3.5 SP1测试过。数据库使用了包括在Visual Studio 2008专业版中的SQL Server Express版。Visual Studio 2008企业版和完整版本的SQL Server非常有用,但不是必需的。
要想运行前面列举的工具和产品,你需要至少一台安装Windows Vista、Windows XP SP2(或更高)、Windows Server 2003或Windows Server 2008的PC。为了测试CSLA.NET对多物理层的支持,你需要为想要添加的每一层准备一台PC(也可以使用虚拟PC或其他类似的工具)。
本书结构
本书介绍了CSLA.NET 3.6架构背后的构思过程,描述了怎样搭建支持这个架构的框架,并且展示了如何使用这个框架创建基于业务对象的WPF、Web Forms和WCF服务应用程序。
如果你想知道如何设计和构建一个.NET平台的开发框架,就需要阅读整本书。如果你只想知道如何使用CSLA.NET框架,但对框架本身是如何设计并实现的并不感兴趣,你只需要阅读第1章到第5章和第17章到第21章。
第1章介绍了分布式架构的一些概念,包括逻辑和物理框架、业务对象和分布式对象。更重要的是,这一章搭建了一个舞台,为后续章节的讨论打下了基础。
第2章开始使用了第1章结尾描述的架构,搭建能实现之前提出的目标的代码框架。在第2章结束的时候,你将会看到对象的设计过程,这些对象会在第6章和第16章被实现。但在这之前,还有一些内容要讨论。
第3章讨论了职责驱动的面向对象设计的基本知识。这一章展示了一个示例应用程序的需求和设计。
第4章和第5章讨论了如何使用CSLA.NET框架中的每一个主要基类来创建你自己的业务对象。详细介绍了CSLA.NET基类支持的面向对象构造型,并讨论了可编辑对象和只读对象、集合以及名称/值列表的代码结构。
第6章到第16章都是关于构建CSLA.NET框架本身的内容。如果你对属性声明、验证规则、授权规则、多级撤销、移动对象支持和对象持久化背后的代码有兴趣,那么这些章节就是为你准备的。另外,它们使用了.NET Framework更高深、更有趣的一些特性,包括数据绑定、序列化、反射、动态方法调用、WCF、.NET安全、Enterprise Service、System.Transactions、强命名程序集、动态加载程序集、应用程序配置文件等。
第17章和第18章介绍如何创建应用程序的业务对象。这两章演示了如何快捷地使用框架创建功能强大的业务对象。最终结果是这些对象不仅仅是业务实体,还支持第1章中讨论的数据绑定、验证、授权、多级撤销和各种可以优化性能、可扩展性、安全和容错性的物理配置。
第19章演示了如何为业务对象创建WPF界面。第20章演示如何使用ASP.NET WEB Forms界面实现相似的功能。
第21章演示了使用业务对象创建WCF服务的方法。这个方法通过为业务对象提供任何Web服务和WCF客户端都可以调用的可编程接口来实现面向服务开发。
在本书结束之前,你会得到一个实用的支持面象对象应用程序设计的框架。这个框架实现了一个可以在不同物理配置上部署的逻辑模型,该模型能够完美地支持Windows、Web和XML服务客户端。
下载代码
本书代码可以在Apress网站(www.apress.com)的源代码/下载区域获取 。访问www.lhotka.net /cslanet/download.aspx可以获取最新版本的框架和示例程序。
联系作者
你可以通过网站(www.lhotka.net)联系到我。这个网站上有我的博客、框架和这本书的信息,以及我的联系方式。