2007年9月10日星期一

Module & Component

一个CAB应用程序是由若干个Modules(DLLs)组成的。每个Module包含了很多的组件(Componet),这些组件既可以是可视化的也可以非可视化的组件,比方说SmartPart,Workspace,WorkItems,Services等等。

Component

CAB应用程序的最小单元是Component,它包含了下列类型的Component;

Visual Element

  • SmartParts
  • Items(Views 和 Controls)

Support for visual elements

  • WorkItems
  • Workspaces
  • UIExtensionSites

Non-visual elements

  • Commands
  • EventTopics
  • Services

Module

前面我们提到CAB应用程序是由Modules组成的,每个Module是一个独立的部署单元,CAB中提供一个在运行时加载Module的服务,在缺省情况下,该服务使用一个名为ProfileCatalog.xml文件来加载Modules。

当CAB加载一个模块的时候,它使用反射(Reflection)来判断该Module中是否包含一个实现IModule接口的类(通常情况下通过集成ModuleInit类来实现)。

我们可以使用SCSF来创建两种不同类型的Module:

  • Functional Module -- 只是给其它模块提供一些服务,并不实现一个Use-case,不包含一个WorkItem
  • Business Module -- 实现一系列相关的用例,包含WorkItems。
在CAB中,按Module来部署的这种设计可以让我们很容易的开发一个容易扩展的应用程序,每一个Module我们可以定义为一个Plugin,当一个成熟应用程序运行在客户现场的时候,我们可以很容易根据客户的需求开发一个独立的业务模块,而不会影响整个应用程序。各个业务模块之间的关系是松耦合的,我们可以通过EventPublisher和Subscribe模式来实现各个模块之间的相互操作或服务的调用。

没有评论: