今天終於把手上的ASP.NET 3.5書籍翻譯的最後一章交出去了,因此再度有時間來維護這邊的文章,並且也能再留意一下CSLA.NET的發展近況。而由原作者Rockford Lhotka的網站發現,在今年的十二月將有新的一本 Expert C# 2008 Business Objects 會出版,而且很意外地發現「天瓏資訊圖書」竟然也預定進口並已開放預訂了。看來阿源哥哥將近一年來在Blog上的推廣,似乎有看到了成效,似乎也引起了國內愛好者注意的眼光。
或許還有許多人,不太了解CSLA.NET能有什麼功能?對於應用程式的開發能有多大的幫助?而正好Rockford Lhotka在其個人Blog上發表了一篇「Overview of CSLA .NET 3.6 for Windows and Silverlight」,阿源哥哥就借用來暫且翻譯如下,並且也順便向各位預告一下,已經請出版社去洽談該本書的翻譯版權了,如果不太意外的話,在明年(2009)四、五月左右,各位將會有一本完整的CSLA.NET的中文書籍了。
概述Windows和Silverlight的CSLA.NET 3.6
CSLA.NET 3.6是一項可在分散式運算環境中,使用物件導向的設計概念,來建構企業應用程式的框架(Framework)。為Windows所使用的CSLA.NET,以及為Silverlight所使用的CSLA.NET,雖然支援不同的平台,但是共用了許多相通的特性和功能。兩個Framework實作之間的通用性,能允許在.NET和Silverlight之間,共用商務物件(Business Object)的程式碼,而差異能允許利用兩個不同平台的功能。
CSLA.NET 3.6是自2001年左右開始,CSLA.NET Framework最新發展的版本。在過去八年,該Framework已在許多方面有長足的增長和改變,並且是目前在.NET平臺上,最受到廣泛使用的開放原始程式碼的開發框架(Development Framework)之一。該Framework涵蓋在一個非常寬鬆的軟體授權,以及有一個充滿活力,有幫助且友好的社群團體。
CSLA.NET的主要目標是,使你能夠建構豐富,強大而靈活的商務層(Business Layer)應用程式。

此商務層是由商務領域物件(Business Domain Object)所組成,封裝了商務邏輯(計算、演算法處理、驗證和授權)。這些物件應該根據應用程式領域的商務使用案例來設計。藉由一些合理的謹慎處理,可以建構一組同時使用在.NET和Silverlight環境內的商務物件。
在某些情況下,使用CSLA.NET,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查詢支援
- 許多的一般生產力功能,可用於很多的企業應用程式方案中
- 非同步資料存取,和非同步驗證規則
Rockford 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層模型之間切換,而不用更改程式碼。更改的純粹只是其中的配置。
Windows所使用的CSLA.NET
Windows所使用的CSLA.NET,讓你可以輕鬆地在商務物件的頂端,建立WPF、ASP.NET(Web Forms、AJAX和 MVC)和Windows Forms的使用者介面。並且也支援WCF服務、Windows Workflow和asmx Web服務介面。雖然大多數的應用程式只需要一兩種類型的介面(例如,Web表單,和WCF服務),但是在技術上,可以在同一組的商務務物件上建構所有這些介面。
CSLA.NET包含每個主要UI技術的一些UI控制項。這些控制項能幫忙減少UI程式碼,和提高最大效率。
在WPF提供以下的控制項:
- CslaDataProvider:WPF資料提供者(data provider)可以在UI中,使用命令實作「儲存」、「取消」、「新增」,和「刪除」項目的功能。
- PropertyStatus:像是在Windows Forms的ErrorProvider,但是管理每個控制項的驗證、授權,和忙碌通知。
- ObjectStatus:使資料繫結到商務物件的狀態屬性(IsValid、IsNew‥等)。
- Authorizer:以容器為基礎的實作,根據商務物件的授權規則「啟用/禁用」控制項。
在Web Forms中提供以下的控制項:
- CslaDataSource:Web Forms的資料來源控制項,支援資料繫結到商務物件。
- DataMapper:簡化將表單張貼值複製到商務物件的元件。
在Windows Forms中提供以下的控制項:
待續‥‥


