zoukankan      html  css  js  c++  java
  • 简介(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。

    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、基本架构图

    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
    一个第三方工具。

  • 相关阅读:
    js最佳实践
    js图片库 案例
    DOM
    js语法
    导航栏的ul中的li设置问题
    wDatepicker97的用法(点击事件联动)
    jqueyr validtion的使用
    哥哥写的例子(后台没有进行排序分组的时候,前台进行自己分组)
    关于require js加载的时候报错的问题
    一些简单的三目运算的使用(举例购物车)
  • 原文地址:https://www.cnblogs.com/lglruirui/p/1772912.html
Copyright © 2011-2022 走看看