看來(lái)微軟要全力推SmartClient了,Application Block推出了一個(gè)又一個(gè)。我們這個(gè)項目既然要用SmartClient,自然會(huì )關(guān)注這些好東
東。目前我們確定要使用的Application Block 包括, Offline 和 CompositeUI 。有的同學(xué)就會(huì )說(shuō),這些個(gè)Block實(shí)在是太復雜,不好用。確
實(shí)他們的代碼都很復雜,滿(mǎn)是什么模式XXX一大堆。但是用起來(lái)卻不是很難。這里就介紹一下CAB(Composite UI Application Block)的基本使
用方法。注意是使用方法和一些使用原則的東西,因為還沒(méi)有深入去分析具體的代碼。
首先介紹一下CAB是個(gè)什么東西,CAB最大的特征是她就是一個(gè)IOC界面容器,它可以根據容器內組件的依賴(lài)關(guān)系自行組裝,以解除耦合,CAB中
的View,Controler,以及Service組件都是通過(guò)該容器自行組裝,以完成業(yè)務(wù)操作。CAB中的 Event attribute 和 command attribute 又為解
耦提供了許多方便?!?br> 下面中就幾個(gè)主要和我們打交道的類(lèi)做一下介紹。
(1) SmartParts
就是我們最小的界面組件,并且和WorkItem中的View一一對應。聲明SmartPart的方式也非常簡(jiǎn)單。比如
[SmartPart]public partial class DropRegistration : UserControl{}
在類(lèi)DropRegistration上面加上[SmartPart]這個(gè)屬性就好。容器就會(huì )認為這個(gè)是一個(gè)SmartPart,在需要的時(shí)候會(huì )將其注入到需要的類(lèi)中。一般
在View上設計展示給用戶(hù)的最小元素,比如一個(gè)登陸框。你可以用SmartPartHolder或是WorkSpace來(lái)裝載顯示它。
(2) WorkSpace
是顯示組件的容器,WorkSpace中的WorkItem都是通過(guò)傳入的WorkSpace來(lái)顯示自己。CAB中提供了幾種WorkSpace,不同的展示方式。
1)MdiWorkspace:把WorkItem 作為一個(gè)子窗體進(jìn)行顯示,與平常的MDI窗體相似。
2)TabWorkspace: 以tag的形式顯示W(wǎng)orkItem。
3)DeckWorkspace: 以平鋪的形勢,一次只顯示一個(gè)WorkItem。
4)ZoneWorkspace:這個(gè)還沒(méi)試過(guò),找個(gè)時(shí)間補齊 ^_^。
(3)WorkItems
這個(gè)家伙是一個(gè)用例中不同組件的運行時(shí)容器。所以在項目中決定以用例來(lái)劃分WorkItem,來(lái)作為我們的一個(gè)原則之一。
在一個(gè)WorkItem中包含了重要的方法、屬性還有成員.
1) 首先當然是初始化的方法,每個(gè)WorkItem都必須實(shí)現Run(IWorkspace workspace)方法.
2) 每個(gè)WorkItem都有State,你可以把它想象成Asp.net中的Session一樣,可以把一些在本W(wǎng)orkItem中傳遞的信息存到State中。
這樣在這個(gè)WorkItem中的都可以訪(fǎng)問(wèn)他。要實(shí)現這并不難。在你類(lèi)屬性上面加上[State]的屬性比如:
[SmartPart]public partial class DropRegistration : UserControl{[State]private Customer customer = null;public CustomerDetailView(){InitializeComponent();}private void CustomerSummaryView_Load(object sender, EventArgs e){if (!DesignMode){customerBindingSource.Add(customer);}}
就表示用的是State中的該類(lèi)型的信息,在窗體加載的時(shí)候就可以直接綁定customer信息到窗體中,而沒(méi)有在此之間發(fā)現實(shí)例
化的代碼。
3) WorkItem 中運用到了MVC模式。所以包括了View和Controller,一般情況下一個(gè)View和一個(gè)Controller.
(4)ApplicationHost
Application host 是應用程序中的各種組件的組織體。程序的WorkItem均運行于A(yíng)pplication Host之上。他是CAB容器的入口。
(5) Services
CAB 中提供了一系列的基礎服務(wù)類(lèi)以供在程序中使用。當然你也可以實(shí)現自己特殊功能的服務(wù)。這里介紹CAB中的幾種重要的服務(wù):
1) Catalog Reader Service: 用于讀取配置目錄的服務(wù)。
2) Event Broker Service : 事件代理服務(wù),符合CAB中事件聲明規則的事件可以通過(guò)它來(lái)傳遞,很多時(shí)候解耦就靠它哦。
3) Module Loader Service : 模塊加載服務(wù),目前用的比較少,或是用了沒(méi)感覺(jué).
4) Authentication Service : 估計我們會(huì )借鑒一下然后,自己實(shí)現一套.
5) State Persistence Service : WorkItem中的狀態(tài)持久化服務(wù),用以保存WorkItem的State中的信息到持久層。
(6) Modules
模塊由以上說(shuō)到的 Services, WorkItems, SmartParts, Controllers, Business Entities 組成. 從最直觀(guān)的形象上說(shuō)就是一個(gè)Dll,一
個(gè)子系統。他有自己的初始化方法Start(),用于初始化本模塊和運行它的WorkItems.
基礎的東西就先介紹到這里,希望對組員有所幫助。以后會(huì )隨著(zhù)研究的深入,繼續在Blog上探討CAB的各個(gè)特性以及使用的方式。
聯(lián)系客服