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

转载于:https://www.cnblogs.com/lglruirui/archive/2010/07/07/1772912.html

简介(CAB和SCSF编程)相关推荐

  1. 单片机搭建环境烧录方法_万物互联-stm32单片机简介、烧录、编程及其项目环境搭建...

    万物互联-stm32单片机简介.烧录.编程 前言:stm32单片机这里给出简单介绍,给不了解的朋友普及下硬件端的基本知识,叙述的较为简单,想深入研究的朋友可以去一些官方网站.论坛.博客汲取知识.最下端 ...

  2. BLE简介和Android BLE编程

    http://www.aiuxian.com/article/p-1752155.html 一.BLE和BT区别 其实我知道许多程序员不太喜欢阅读除了代码以外的文档,因为有时这些过于冗长的文档对编程并 ...

  3. 【linux】BootLoader简介(c语言编程)

    BootLoader简介 一.BootLoader     1.BootLoader的作用             一个嵌入式linux系统从软件的角度看通常可以分为4个层次:            ...

  4. c语言程序功能简介怎么写,电脑编程c语言

    c语言简介 发布于2015-03-14 14:20 一,程序语言 c语言是一门高级语言,在了解它之前我们得了解一下机器语言和汇编语言. 1.机器语言 它是低级语言,也叫二进制代码语言,通俗一点就是用0 ...

  5. ESP8266简介:三种编程方式

    随着互联网的日益发展,智能家居的观念也逐渐深入人心.想要玩转智能家居,就离不开互联网,今天给大家介绍一款模块--ESP8266.小编将手把手教大家利用8266实现家电的控制. ESP8266 可以用来 ...

  6. (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义03--对象的生命周期--构造函数和析构函数...

    8.1.3  对象的生命周期 每个对象都有一个明确定义的生命周期,除了"正在使用"的正常状态之外,还有两个重要的阶段: 构造阶段: 对象最初进行实例化的时期.这个初始化过程称为构造 ...

  7. 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)

    知识库递归编程java和prolog代码:逻辑语言Prolog简介(附24555字PDF发"递归prolog简介"下载) 数据简化DataSimp 今天 数据简化DataSimp导 ...

  8. Motoman机器人离线编程——Motocom32开发简介

    欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程--Motocom32开发简介 Motoman机器人离线编程--Visio Studio环境配置 Moto ...

  9. python网络编程(1):客户端与网络编程简介

    python网络编程(1):客户端与网络编程简介 很多情况下,网络编程就是选择并使用一个已经支持所需网络操作的库的过程. 1.使用pygeocoder实现地址和经纬度的转换 通过pipenv创建虚拟环 ...

最新文章

  1. 原来你离进大厂,只差这些面试题!
  2. 面试了一个 46 岁程序员,思绪万千
  3. windows下二进制mysql的卸载以及安装教程
  4. mysql 日志记录 archive_完美起航-Mysql日志管理、备份与恢复
  5. php mysql 冒号_php – 使用pdo在搜索变量中使用冒号(:)进行查询
  6. 关于linux拨号上网的软件实现方案[原创]
  7. Tensorflow+Spyder+Opencv环境搭建
  8. 复习宝典之Spring
  9. 非安全黑客手册0911PDF电子书 下载
  10. 显示计算机101代码,电脑出现蓝屏故障101停机码,怎么解决问题
  11. MATLAB中round函数的使用
  12. 剑灵服务器维护到几点,《剑灵》公布首测具体开放时间 凌晨1点关服
  13. python程序员培训_Python程序员学习路线图
  14. c语言程序设计分值,计算机考试题分值分布
  15. Flutter高仿微信-表结构
  16. iptv信息服务器,IPTV点播电影类服务最获青睐
  17. Struts2 框架学习——s标签和国际化
  18. 计算机与现代化是核心期刊吗,计算机与现代化是核心期刊吗
  19. [Neepuctf2021]wp
  20. 【ae】定格关键帧,贝塞尔单边变换

热门文章

  1. [NOI2014]动物园 【kmp】
  2. 解决ntp的错误 no server suitable for synchronization found
  3. String StringBuilder StringBuffer 对比 总结得非常好
  4. 控件不能与用户交互的原因
  5. 设计模式--原型模式
  6. [转]T4模版引擎之生成数据库实体类
  7. matlab kill
  8. 什么是nodejs呢?
  9. 【转】跨DLLnew delete问题
  10. 实操《深入浅出React和Redux》第二期—Flux