[Prism]Composite Application Guidance for WPF(2)--Composite Application Library(CAL)

       [Prism]Composite Application Guidance for WPF(2)--Composite Application Library(CAL)
                                  周银辉

 

1,一个Composite Application 的基本组成

Composite Application LibraryCAL)作为Composite Application Guidance的最重要的组成部分,为我们提供打造Composite Application的最基础的组件和服务。

看看下面这张图

一个Composite Application通常由这些部分组成的(与此同时,CAL相应的为我们提供了这些基础组件)

Shell:应用程序的顶级窗口,其Host了各种不同的UI组件(通常是View),Shell本身并不知道它包含了哪些内容,通常情况下它有这非常有限的功能,而其他绝大多少功能则是由各个Module来提供的

Shell PresenterShell的表示层逻辑,和MVP模式中的Presenter的意义相同,这使得Shell易于测试和维护

Region:其相当于一个占位符,用于Host可视化元素(其被放在View中,并通过Region Manager来访问)

Module:由View,数据模型,业务逻辑,服务等组成的一个集合,也就是我们常说的“模块”,其易于被单独开发、测试和部署,通常情况下我们让不同团队成员甚至是不同的团队负责不同的模块,然后这些模块最后再被集成起来成为一个完整的应用。

View:即“视图”,与MVP中的View意义相同。

Service:应用程序或模块暴露一些用于共享的“服务”,这些服务会被一个成为“服务容器”的东西来进行定位和加载(在CAL中其为Unity Container

2,创建一个基于CALComposite WPF Application

如果应用比较复杂的话,我们一般会将应用划分成不同的模块,然后再用一个Shell Project来将这些模块组织起来,我们来看看如何使用CAL来做到这一点的。

看看下图:

定义一个Shell

Shell为程序主界面提供基础的布局,这些布局由Region来定义(或者说来占位),然后其他模块可以向Region注入视图(View或其它可视化元素)。通常情况下,Shell还会包含一些应用程序的基础样式(Style)等以便为应用程序提供统一的风格。

ShellViewRegion之间的关系可以参考下图

创建Bootstrapper

每个应用程序都有一个自己特有的Bootstrapper(其继承于UnityBootstrapper)来定义一个如何枚举其模块的策略(比如,按照静态引用的方式来枚举其各个模块,还是用一个配置文件来配置各个模块,该配置文件与CABProfileCatalog.xml文件类似)

通常情况下,UnityBootstrapper会启用所有的CAL基础服务,但我们可以通过禁用或替换这些服务来定制更适合我们应用程序的Bootstrapper

另外,Bootstrapper提供了日志功能,其采用的是.NET TraceWriter,但我们也可以在Bootstrapper中来定制自己的日志。

更多的,可以参考下图

创建Module

从语法层面上讲,我们需要实现IModule接口来创建一个Module。另外,Module还会负责将该模块中的View注入到Shell或其他模块的Region中去。

Composite Application Guidance for WPF中我们更多的可以看到采用MVP模式来创建的Module。关于Composite Application Guidance for WPF中的MVP模式,我会在该系列随笔的后续文章中讲到。

部署Composite WPF Application

基本上跟部署普通的WPF桌面应用差不多(InstallerClickOnce),但有时会有一些新的问题,由于我们可以采用较松散的方式来来组织各个模块(比如采用配置文件)而使得模块之间没有直接引用关系,这会导致一些打包工具不能自动查找关联模块来打包,为此CAL提供了一些工具和技术来解决这些问题。

posted @ 2008-07-15 16:45  周银辉  阅读(7100)  评论(8编辑  收藏  举报