CSLA.NET是自2001年左右开始,CSLA.NET 3.6是现在最新的版本。在过去八年,该框架已在许多方面有长足的增长和改变,并且是目前在.NET平台上,最受到广泛使用的开放源代码的开发框架 (Development Framework)之一。该框架涵盖在一个非常宽松的软件授权,以及有一个充满活力,有帮助且友好的社群团体。
CSLA.NET致力于 构建丰富,强大而灵活的业务层( Business Layer) .
此业务层是由业务领域对象( Business Domain Object)所组成的,封装了商业规则(计算、算法处理、验证和授权)。这些对象应该根据应用程序领域的业务使用案例来设计。藉由一些合理的谨慎处理,可以建构一组同时使用在.NET和Silverlight环境内的商业对象。
在某些情况下,Silverlight的业务对象可能包含,与Windows程序完全相同的对象程序代码,但是在大多数情况下,会有一些小的程序代码更 改。在大多数情况下,超过90%的对象程序代码会在.NET和 Silverlight之间共享,而只有少于10%的程序代码会不同。差异的主要原因是Silverlight程序设计的异步性质,和传统.NET程序设 计外加的同步性质。如果愿意使用相同的异步设计于.NET的实作,就可以实现在两个平台间共享99%或100%的程序代码。
CSLA.NET
核心功能
无论使用何种平台,CSLA.NET被设计来做两件事情。首先,用来支持建构一个以丰富的商务领域对象为基础的强大业务层。第二,启用以称为移动对象(Mobile Object)概念为中心的分布式应用程序架构。
为了能支持建构丰富的领域对象,CSLA.NET包含提供通常所需功能的子系统,包括
- 完全支持数据绑定(WPF,Silverlight,Windows Form和Web Form)
- 对象状态追踪(对象是否为新增、修改、标记为删除,等等。)
- 标准化业务和验证规则处理
- 在对象和属性层级的标准化授权
- 整合及简化,标准的.NET身份验证模型
- 撤销(Undo)功能,用来支持实作取消按钮,和复杂分层的用户接口(UI)
- 标准化集成与数据存取层或ORM
- 加强对于业务对象的LINQ查询支持
- 许多的一般生产力(productivity)功能,可用于很多的企业应用程序方案中
- 异步数据存取,和异步验证规则
Rockfor d Lhotka的Expert C# 2008 Business Objects书籍( Apress 出版)包括这些子系统的详细说明。
这些子系统是透过一组可继承来建构商业对象的基础类别所公开。 从这些基础类别,能够建立一组对象模式样板:
-
Editable root (单一或集合):一个对象,其属性为可擦写,并且可以直接检索,并储存在数据库中
-
Editable child(单一或集合):一个对象,其属性为可擦写,并且以某项Editable root的一部分被检索,并储存在数据库中
-
Dynamic list:一个包含Editable root对象的集合,与DataGrid控件整合,可于用户离开Grid当中某一列(row)时,自动更新每个对象(不适用于ASP.NET界面)
-
Read-only root(单一或集合):一个对象,其属性为只读,并且可以直接由数据库中检索
-
Read-only child(单一或集合):一个对象,其属性为只读,并且以某项Read-only root的一部分由数据库中被检索
-
Name/value list:一个Read-only root集合,只包含name/value数据对,用来填入ComboBox或ListBox控件
-
Command:一个对象,可在客户端,以及/或服务器端,执行程序代码;通常是执行数据库程序代码,或服务器端工作流程(Workflow)
使用CSLA.NET来建构业务对象能够导致能以一种前后一致、标准化的方式来建构对象。这样一来,不仅是对象能自动从所有这些子系统获得实质的利益,而且可归功于应用程序一致性的架构、设计和编码,整体的可维护性可以彻底地改善。
移动对象(Mobile Object)的概念是一项在分布式应用程序环境中,支持使用丰富的业务领域对象的技术。特别是该构想认为业务对象是行动的,能够物理性地从一台计算机移动到另一台,以利用每台计算机上可用的资源。
CSLA.NET包含一个称为数据门户(Data Portal)的组件,负责提供行动对象功能。使用数据门户,业务对象可能实施存放在应用程序服务器上,因此可以有效地与数据访问层(和数据库)交互。然 后对象可能物理性地越过网络移动到客户端工作站(Web服务器,Windows客户端,或Silverlight客户端),其中它们可以藉由将资料直接绑 定到UI,有效地与使用者交互。一旦用户完成与对象之间的交互,然后对象可能移回到应用程序服务器,可以与数据访问层交互来更新数据库。
移动对象是非常强大的技术,可在分布式环境中利用面向对象设计(Design)和程序设计(Programming)的能力。CSLA.NET数据门户抽 象这个概念的复杂程度。使应用程序可以在1层(Tier)、2层、3层、和甚至4层模型之间切换,而不用更改程序代码----更改的纯粹只是其中的配置。
CSLA.NET for
Windows
Windows
所使用的CSLA.NET,让你可以轻松地在业务对象上建立WPF、ASP.NET(Web Forms、AJAX和 MVC)和Windows Forms的用户接口(
CSLA中将这些应用统一称为用户接口
)。 它还支持WCF service,Windows Workflow和asmx web Services接口.你可以创建这些用户接口在同一组业务对象上面,虽然大多数应用程序只需要一或者两种类型的用户接口(比如Web Forms和WCF services).
CSLA.NET在上面说的每种UI接口中都包括一些UI控件,这些控件帮助最小化UI代码,最大程序提高开发效率.
在WPF接口中有下列控件:
-
CslaDataProvider--WPF data provider 使UI层能够调用执行保存(Save),取消(Cancel),添加(Add),删除项(Remove Item)等方法.
-
PropertyStatus --比如类似于Windows Forms的ErrorProvider,但是为每个控件管理验证,权限和忙碌通知(busy notificatio)
-
ObjectStatus -- 绑定数据到业务对象的状态属性(IsValid,IsNew等)
-
Authorizer --container层的实现,可以设置成控件是否基于业务对象的权限规则
在Web Forms中有下列控件: -
CslaDataSource --一个Web Forms数据源控件支持到业务对象的绑定
-
DataMapper -- 一个可以简单的复制form的数据到业务对象的组件
在Windows Form中有下列控件: -
BindingSourceRefresh -- 负责窗体中数据绑定的刷新
-
CslaActionExtender -- Save,Cancel等按钮事件的自动对象处理管理
-
ReadWriteAuthorization -- 自动的设置控件是否基于对象的认证机制.
CSLA.NET 也包括一些方法来帮助创建服务和工作流activities.
为WCF和asmx service提供了以下组件:
-
DataMapper -- 用来在业务对象和数据契约对象(data contract objects)之间拷贝数据的组件.
对于WCF services,还有另外一个组件:
-
PrincipalCache ---用来缓存.NET认证实体,以方便在WCF service中验证和授权时使用
对于Windows Workflow来说,有下列组件:
-
WorkflowManager --简单的启动,挂起,继续一个Workflow对象
CSLA.NET对于Windows在数据访问方面提供了比较大的灵活性.CSLA.NET不是一个数据访问层和对象持久层(ORM)工具.然而, CSLA.NET确实提供了一个和数据访问(或者是ORM)交互的标准形式.这个弹性机制使你能够使用大量的数据访问技术,包括纯ADO.NET, DataSets,LINQ to SQL,ADO.NET Entity Framework , NHibernate,Paul Wilson's ORM mapper以及一些其它技术.
CSLA .NET for Silverlight
CSLA.NET for Silverlight使你能够简单的在业务对象上创建Silverlight 2.0用户接口,CSLA.NET除了支持Silverlight的数据绑定,还提供了一些额外的控件,使你能够几乎不需要UI代码就能创建 Silverlight窗体.和CSLA.NET for Windows一样,大多数你的代码会在业务对象里面,在表现层和业务行为之间保持清晰的分隔.
因为Silverlight并不象WPF和Windows Forms那样完全支持数据绑定特性,CSLA.NET for Silverlight提供了一组Silverlight UI控件和特性来提高象WPF一样高水平的功能.你不仅能够在业务对象上创建Silerlight接口,CSLA简化了建立在这些对象上创建丰富,交互性 的业务接口.比如,Silverlight并不包括WPF commanding,所以CSLA.NET包括替换的功能使你能连接通常的UI功能和你的业务对象,并不用重新调整你的后台代码.CSLA.NET提供 的控件包括:
-
CslaDataProvider--一个等同于WPF dataprovider的Silverlight控件
-
InvokeMethod -- 一个等同于commanding的Silverlight控件
-
PropertyStatus -- 一个等同于WPF validation和 Windows Forms ErrorProvider的Silverlight控件(甚至比它们还要高级)
-
ObjectStatus --一个控件,使用可视化的管理,基于业务对象的状态自动地变更UI
-
BusyAnimation -- 一个控件,显示忙碌动画,能够绑定到你的对象以便自动的显示你的对象正在执行一个异步操作
-
Data grid columns -- 通常的data gird列类型与PropertyStatus控件一起为每个单元(cell)显示验证,权限和忙碌信息
CSLA.NET for Silverlight使你的业务对象中的数据访问可以调用远程的服务来获取或者是更新数据.你可以使用这个模型去实现cs或者是soa设计.例如,你可 能使用ADO.NET Data Services在一个服务器上来公开data services,使用CSLA.NET for Silverlight来创建业务对象和Silverlight UI来和这些data Services交互.
如果你已经有了一个CSLA.NET for Windows服务器,你可以利用CSLA.NET的一些高级功能.可以明确的是,你的CSLA.NET for Silverlight应用程序可以和你的CSLA.NET for Silverlight交互,使你的应用程序能够实现2层,3层,4层的物理部署.在这个实体中,你的.NET业务对象(可能已经支持了WebForms UI)可以直接有效扩展到Silverlight客户端.CSLA.NET提供的标准的对象持久模型现在自动地被用于支持Silverlight客户端, 提供一个难以置信的高水平的代码和跨越.NET和Silverlight平台功能重复利用.
CSLA.NET 部署模型和移动对象(Deployment Models and Mobile Objects)
CSLA 的数据门户确保了应用程序中的移动对象概念的使用.这对你的代码来说是很明确的,并且你用来和数据门户交互的代码是很标准的.使用数据门户的好处是具有弹 性;你可以切换你的应用程序从1层部署到三层甚至四层,而这仅仅是通过修改配置文件 --没有任务代码修改是必须的.
CSLA.NET for Windows 支持1层,2层和3层物理部署.
再重复一次,仅通过修改配置文件来切换不同的物理模型是有可能的.你的UI代码,业务对象和数据访问代码完整无缺地在所有的三个部署实体中穿越.
在三层模型中,业务对象层(包括业务对象代码的数据集)被既被部署到应用服务器,又被部署到客户端,你的业务对象实际上通过数据门户在这两个机器之间移动了.
数据门户使用标准的.NET技术,例如WCF来管理网络通信.这个实现使用了强大的设计模式,例如管道适配器(channel adapter),Provicer模式和message router.
CSLA.NET for Silverlight支持1层,2层,3层和4层物理部署.1层,2层和3层模型和CSLA.NET for Windows的一样.4层模型有一点不同:
CSLA.NETfor Silverlight的3层和4层模型中,数据门户是更高级的,因为你的业务对象实际上在Silverlight客户和.NET服务器之间移动.这意味 着你的对象在不同的平台,也就是不同的机器之间移动.这对你的代码来说是非常清晰的,才会使你的功能和代码就象在纯.NET应用程序一样.
应该意识到在.NET和Silverlight的3层和4层部署模型中,你的业务代码和业务对象在每台机器上都是完整的.这意味着你有弹性去运行逻辑在客户端,服务器端或者是两个都运行,来满足你的应用程序需求.
标准化的数据访问(Standardized Data Access)
CSLA.NET不是数据访问技术,也不是持久层(ORM)工具.然而,数据门户(
实现了移动对象
)强制了你的对象和数据访问层或者是ORM交互的标准和结构.这个标准化保留了灵活性,使你能够自由的使用几乎任何你选择的数据访问技术,包括但不仅限于:
-
纯ADO.NET(Connection,data readers等)
-
DataSet和TableAdapter对象
-
LINQ to SQL
-
LINQ to XML
-
ADO.NET Entity Framework
-
Nhibernate 和其它第三方ORM工具
-
简单的文件I/O
-
远程XML或者是JSON服务
数据门户支持两个模型:数据门户管理和对象工厂
在数据门户管理模型,数据门户管理你的业务对象的创建和状态,并且调用方法来完成持久化.所以在你的模型中要负责和数据访问层或ORM交互,并且数据门户来确保你的对象状态(new,dirty等)是合适的.
在对象工厂模型中,数据门户创建一个对象工厂来负责业务对象的创建和状态.你必须服务这个对象工厂.在你的业务对象内使用数据门户调用方法来完成持久化. 你的这个模型或者是对象工厂来负责与数据访问层或ORM交互,或者是实现你的数据访问层,并且要管理你的业务对象的状态(new dirty..)
数据门户管理模型对于数据访问层使用纯ADO.NET,简单的文件I/O或者是其它的相对直接的技术时提出来的,这时候你的数据门户提供了很多对象自动化管理,模型很简单.
对象工厂模型是对于使用ORM或者更复杂的数据访问层提出来的,这会很复杂,但是要求更多的代码分离,并且更加灵活.这是使用一个开放的框架实现的,允许TDD环境,这在使用数据门户模型的时候是很困难达到的.
结束语
CSLA.NET是一个强大的,久经考验的框架,它支持在分布式应用程序中面向对象业务层对象的创建.它帮助你压缩你的业务逻辑在一个富业务领域对象中( 笔者:充血型的 ),并且支持你的业务对象有强大的特性,例如数据绑定,业务逻辑,验证和权限.
从3.6版本就开始使用它吧,CSLA.NET支持所有的.NET平台的通常使用的接口类型,并且也对Silverlight2.0提供了无缝支持.
概述CSLA.NET 3.6 (Overview of CSLA .NET 3.6 for Windows and Silverlight)