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)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
