CAB随心所欲的逻辑.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通过CAB & SCSF迅捷构建集成式桌面应用程序

Composite UI Application Block (CAB)是一个程序框架,Smart Client Software Factory (SCSF)也是一个框架,它们都是应用于桌面应用程序的Framework。不过SCSF是对CAB塑料薄膜般的轻薄封装。进而使基于CAB的应用程序更加一致,不过代价是工程结构略显呆板,其实 CAB和 SCSF 都系出名门,有纯净的贵族血统,它们是微软公司模式与实践小组(P&P)开发的(MVC)序框架,用来规范开发领域内的复杂逻辑关系。P&P同时还是Enterprise Library和 WEB Client Software Factory 的设计者。配置

自从15年前GOF23提出以来,诸多的软件设计者实践着这23种设计模式,其中的苦辣与心酸恐怕只有自己知道。微软的模式与实践小组也是GOF23的践行者,他们为我们奉献的就是在Microsoft.Practices命名空间下构建的一系列Block。CAB 和SCSF也是一堆Block。是微软中一些GOF23的践行者们为构建集成式桌面应用程序敲打出的一个设计构架。

MVC(Model View Controller)模式是一种广泛使用的设计模式,模式是一种广泛使用的设计模式,它将应用程序根据功能不同划分为3个主要部分,它们分别是模型、视图和控制器。CAB是MVC的微软实现,这一点在开发中要时刻牢记,它没有在NET程序中加如任何新的语言元素,是对NET桌面程序的包装。CAB提供了基于桌面程序的MVC解决方案,应用CAB可以开发扩展性高、测试容易、逻辑划分清楚的应用程序。

所谓模型,就是CAB中要被显示的数据,通常情况下模型要从数据库中读取数据、保存模型的状态等,并且提供数据的访问方法及数据的维护。

视图将回答如何在程序中显示我们引入模型中的数据,并决定人机交互的过程,就是显示模型的用户界面。

控制是用来处理用户的输入或交互命令,以便改变模型的状态,选择适当的视图来显示对应模型的数据。

在了解MVC后,进一步观察CAB中的MVC。CAB程序一般都有如下的结构。

1、派生于FormShellApplication的主程序。

2、定义“用例”的myWorkItem是从WorkItem类派生的。

3、mainFrom就是一个平常的From,作为应用程序的主窗口被创建显示。有一系列的Workspace在From上定位,

Workspace是一种类型的容器,起到视图的作用。

4、在工程中还有ProfileCatalog.xml配置,它负责外从部引入功能模块。我们可以在程序外部以动态库的

形式建立功能模块。

从CAB的外部观察基本上就是这些,在介绍第一个简单的CAB程序前先熟悉一下CAB的成员对象。

Shell Application 引导Form的过程建立。

WorkItem 容器放UI控件,SmartPart,各种服务和其他的组件。它表示了我们要完成的一个业务逻辑。 SmartPart 在Form中容纳用户的客户组件。就是每个功能模块的最小视图,自定义控件

UIElement 菜单等。

Command 事件委托。

Event 发布和订阅。

SmartPartInfo 决定SmartPart的状态。

Service 各种服务。

State 程序数据对象缓存。

WorkSpace 控件显示视图。

一个简单的程序

using System;

using System.Windows.Forms;

using positeUI;//对CAB进行引用

using System.Collections.Generic;

using positeUI.WinForms; /对CAB进行引用

using System.Threading;

namespace SmartPartQuickStart

{

//建立CAB的外壳类,它派生于FormShellApplication,BrowseCustomersWorkItem代表一个业务逻辑,MainForm是主窗口。SmartPartApplication().Run()进入主消息循环,显示窗口,BeforeShellCreated、AfterShellCreated和OnUnhandledException功能如其命名。

class SmartPartApplication : FormShellApplication

{

///

/// The main entry point for the application.

///

[STAThread]

public static void Main()

{

new SmartPartApplication().Run();

}

protected override void BeforeShellCreated()//外壳建立之前应用

{

base.BeforeShellCreated();

RootWorkItem.State["Customers"] = new List();//建立(消费者)集合,到根路径中。

}

protected override void AfterShellCreated()

{

base.AfterShellCreated();

}

#region Unhandled Exception

public override void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)

{

Exception ex = e.ExceptionObject as Exception;

if (ex != null)

{

MessageBox.Show(BuildExceptionString(ex));

}

else

{

MessageBox.Show("An Exception has occured, unable to get details");

}

Environment.Exit(0);

}

private string BuildExceptionString(Exception exception)

{

string errMessage = string.Empty;

errMessage +=

exception.Message + Environment.NewLine + exception.StackTrace;

while (exception.InnerException != null)

{

errMessage += BuildInnerExceptionString(exception.InnerException);

相关文档
最新文档