简介(CAB和SCSF编程)

一、CAB的特点
1、松散耦合
把软件分割成很多小块,然后采用CAB的Service机制把这些小块缝合起来。类似于我们通常所说的模块化设计或插件化设计。通过松散耦合,各个小块之间的交互会尽可能的少,从而使程序易于开发,易于扩展和维护,同时对于项目管理也非常重要。
2、CAB提供一些预制的框架用于支持松散耦合
主要有如下几大块:
(1)、运行期模块装载的中央控制,主要有模块遍历和装载服务
(2)、一些服务架构
(3)、WorkItem机制和依赖注入
(4)、Workspace(容器Frame)和SmartParts(控制容器)
(5)、UI扩展点
(6)、时间发布和订阅服务
3、CAB的一些术语
(1)、Shell Application
主WinForm应用程序,CAB程序的各个部分的外部容器。它管理CAB的启动过程。
(2)、Shell Form
Shell Application的主窗口。一般来说就是通常所说的Shell。它通常包含Workspaces和用户界面元素,如菜单和工具条。
(3)、Workspace
SmartPart的容器窗口,而SmartPart一般是由WorkItem拥有的。Workspace可以控制SmartPart是显示还是隐藏。CAB提供了一些标准的Workspace类,当然你也可以自己写一个。
(4)、WorkItem
对象和服务的运行期容器,一般作为CAB应用程序的组成部分存在。可以把它作为逻辑上的子程序或子进程。它是CAB程序的基本单元。用户所写的业务逻辑一般都在一个或多个WorkItem中。
(5)、SmartPart
WorkItem所拥有的数据的可是展示或视图。它为WorkItem所拥有并显示在Workspace中。SmartPart一般就是WinForm控件的实现,一般包含其他的WinForm控件。除显示数据之外,也允许用户修改数据。
(6)、Service
为松散耦合所服务的一些支撑类,通常包含一些与其他WorkItem独立的工具方法。
(7)、Module
一个.NET程序集合,为WorkItems, Service, 和其他支持类提供的一个物理容器。
4、CAB的组成
CAB主要有三个工程组成:CompositeUI、CompositeUI.WinForms和ObjectBuilder。这三个工程创建三个动态链接库:CompositeUI.dll,CompositeUI.WinForms.dll,ObjectBuilder.dll。
二、SCSF的概念
1、SCSF的一些背景
(1)、没有好的辅助开发工具提高开发CAB程序的效率。如创建工程模版等等。
(2)、CAB还不完善
2、基本概念
SCSF实际上是一个代码、文档和工具的集合。介绍一些CAB应用程序的开发实例,以及一些设计模式的遵守。相对于CAB,SCSF提供了三个主要的增强:
(1)、SCSF提供了大量类,这些类提供了很多基本CAB所没有的而又是开发人员所必须的功能。
(2)、SCSF包含一些为开发人员提供架构指导的类。
(3)、SCSF提供了一些叫Guidance Package的工具集。
三、简单的CAB程序:Walkthrough
1、简单的CAB程序结构
(1)、ShellApplication.CS文件,Main方法。类ShellApplication衍生自FormShellApplication。在其参数化类型列表中,传递的是Shell的根WorkItem和ShellForm。
(2)、对于根WorkItem,可以创建一个类继承自WorkItem。在这个简单程序中中该类是空的,什么也不做,仅仅是作为根WorkItem而存在。
(3)、ShellForm是Shell程序创建的主窗口。可以在其上放置Workspace和UI元素。
(4)、程序执行顺序:
CAB框架创建根WorkItem——>创建ShellForm的一个实例——>装载ProgramCatalog.xml中定义的Module。
简介(CAB和SCSF编程)
2、ProfileCatalog.xml文件结构

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <SolutionProfile xmlns="http://schemas.microsoft.com/pag/cab-profile" >
  3.    <Modules>
  4.          <ModuleInfo AssemblyFile="MyModule.dll" />
  5.    </Modules>
  6. </SolutionProfile>

每个<ModuleInfo>元素指定一个module。
(1)、Module的装载流程
当一个Module被装载进程序的地址空间时,装载器会查找衍生自基类
ModuleInit的类。在这个类中可以放一些初始化代码。

  • 在该类中一般又ParentWorkItem的属性,类型为WorkItem。该属性只有写方法,可以从外部写入,但不能读取。它被标为[ServiceDependency]属性,从而导致依赖注入(这是CAB的一个用于松散耦合的一个重要特性)。CAB的模块装载器可以根据该属性知道该模块需要一个特定的类型,也就是说是WorkItem。这里的Service是指通过松散耦合机制访问的任何类。
  • 一旦模块被装载进程序的地址空间,框架会调用其Load方法。我们在实现Module时一般需要重载该方法。在实现该方法时,一般流程如下:(a)、调用基类的Load方法;(b)、创建一个子WorkItem,并把它放进父WorkItem(该父WorkItem是通过注入得来的)的WorkItem集合中。

四、MVP模式(Model-View-Presenter设计模式)
1、基本架构图
简介(CAB和SCSF编程)
2、架构/模式说明
MVP是在客户程序中实现三层架构的基本思想。与CAB相对应,WorkItem代表图中的Model,它包含程序的数据和状态等。业务逻辑主要由Presenter所表示。View是控件显示。
3、View与Presenter的交互
定义一个接口负责Presenter和View之间的通信。一般Presenter不需要知道也不想知道该接口在View中是如何实现的。
一般都需要该接口作为Presenter的分离层,如果没有,则只能让Model直接与View交互,从而导致紧耦合。
4、View实现
使用.NET本身的UserControl等等。常规的实现。
五、跟踪和调试
1、经典的Debugger跟踪
app.config文件结构如下:

  1. <system.diagnostics>
  2.  <switches>
  3.   <add name="MySwitch1" value="all" />
  4.  </switches>
  5. <sources>
  6. <source name="Microsoft.Practices.CompositeUI.Services.ModuleLoaderService"witchName ="MySwitch1"/>
  7. </sources>
  8. </system.diagnostics>

2、CAB Visualizer
一个第三方工具。

你可能感兴趣的:(编程)