分享

张文韬 : 组合界面程序块介绍(Composite UI Application Bloc...

 强子 2008-01-16

组合界面程序块介绍(Composite UI Application Block)

 看来微软要全力推SmartClient了,Application Block推出了一个又一个。我们这个项目既然要用SmartClient,自然会关注这些好东

东。目前我们确定要使用的Application Block 包括, Offline 和 CompositeUI 。有的同学就会说,这些个Block实在是太复杂,不好用。确

实他们的代码都很复杂,满是什么模式XXX一大堆。但是用起来却不是很难。这里就介绍一下CAB(Composite UI Application Block)的基本使

用方法。注意是使用方法和一些使用原则的东西,因为还没有深入去分析具体的代码。
  
首先介绍一下CAB是个什么东西,CAB最大的特征是她就是一个IOC界面容器,它可以根据容器内组件的依赖关系自行组装,以解除耦合,CAB中

的View,Controler,以及Service组件都是通过该容器自行组装,以完成业务操作。CAB中的 Event attribute 和 command attribute 又为解

耦提供了许多方便。 
  下面中就几个主要和我们打交道的类做一下介绍。
(1)  SmartParts
     就是我们最小的界面组件,并且和WorkItem中的View一一对应。声明SmartPart的方式也非常简单。比如

[SmartPart] public partial class DropRegistration : UserControl { }


在类DropRegistration上面加上[SmartPart]这个属性就好。容器就会认为这个是一个SmartPart,在需要的时候会将其注入到需要的类中。一般

在View上设计展示给用户的最小元素,比如一个登陆框。你可以用SmartPartHolder或是WorkSpace来装载显示它。
(2)  WorkSpace
    是显示组件的容器,WorkSpace中的WorkItem都是通过传入的WorkSpace来显示自己。CAB中提供了几种WorkSpace,不同的展示方式。
  1)MdiWorkspace:把WorkItem 作为一个子窗体进行显示,与平常的MDI窗体相似。
  2)TabWorkspace: 以tag的形式显示WorkItem。
  3)DeckWorkspace: 以平铺的形势,一次只显示一个WorkItem。
  4)ZoneWorkspace:这个还没试过,找个时间补齐 ^_^。

(3)WorkItems
    这个家伙是一个用例中不同组件的运行时容器。所以在项目中决定以用例来划分WorkItem,来作为我们的一个原则之一。
 在一个WorkItem中包含了重要的方法、属性还有成员.
 1) 首先当然是初始化的方法,每个WorkItem都必须实现Run(IWorkspace workspace)方法.
        2) 每个WorkItem都有State,你可以把它想象成Asp.net中的Session一样,可以把一些在本WorkItem中传递的信息存到State中。
 这样在这个WorkItem中的都可以访问他。要实现这并不难。在你类属性上面加上[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中的该类型的信息,在窗体加载的时候就可以直接绑定customer信息到窗体中,而没有在此之间发现实例  

化的代码。
    3) WorkItem 中运用到了MVC模式。所以包括了View和Controller,一般情况下一个View和一个Controller.


(4)ApplicationHost
 Application host 是应用程序中的各种组件的组织体。程序的WorkItem均运行于Application Host之上。他是CAB容器的入口。
   
(5) Services
     CAB 中提供了一系列的基础服务类以供在程序中使用。当然你也可以实现自己特殊功能的服务。这里介绍CAB中的几种重要的服务:
   1) Catalog Reader Service: 用于读取配置目录的服务。
   2) Event Broker Service : 事件代理服务,符合CAB中事件声明规则的事件可以通过它来传递,很多时候解耦就靠它哦。
   3) Module Loader Service : 模块加载服务,目前用的比较少,或是用了没感觉.
   4) Authentication Service : 估计我们会借鉴一下然后,自己实现一套.
  5) State Persistence Service : WorkItem中的状态持久化服务,用以保存WorkItem的State中的信息到持久层。


(6) Modules
    模块由以上说到的 Services, WorkItems, SmartParts, Controllers, Business Entities 组成. 从最直观的形象上说就是一个Dll,一 

 个子系统。他有自己的初始化方法Start(),用于初始化本模块和运行它的WorkItems.

基础的东西就先介绍到这里,希望对组员有所帮助。以后会随着研究的深入,继续在Blog上探讨CAB的各个特性以及使用的方式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多