现在的位置: 首页 > 综合 > 正文

Smart Client Software Factory 模块说明(上)

2013年10月19日 ⁄ 综合 ⁄ 共 4636字 ⁄ 字号 评论关闭

SCSF开发活动自动导航图:

Ff699210.387a6617-7bd1-44af-aea7-f4e74b053b80(en-us,PandP.10).png


创建解决方案时,自动生动的框架代码

Ff699272.20298858-a756-4300-a3e5-6e09a3a2b70e(en-us,PandP.10).png

Infrastructure.Interface : 这个工程包括了event topic names, UI extension site names, command names, and workspace names,这些都是Infrastructure.Module模块的公共接口.

Infrastructure.Library : 这个工程包括了智能客户端程序的常用组件,举例来说,它包含一个从Web service中检索配置文件目录的服务.

Infrastructure.Module : 这个工程包含的元素是可以跨工程在整个智能客户端解决方案中共享的。

Shell : 该项目是一个典型的复合UI界面程序块的应用基础。它包含启动窗体和根WorkItem。


Infrastructure.Interface 详述

本项目为Infrastructure.Module 的接口和只包含已经被暴露于其他模块的应用的元素

它由service interfaces(服务接口), constant definitions(常量定义), business entities(业务实体类,只在模块之类传递的)组成,除此之外,它还包含其它一些元素,比如一些通用基类.

Constant Definitions(常量定义)

Commands, event topics, UI extension sites, workspaces 它们都用一个唯一的字符串来标识。这些唯一的字符串被定义为每个这些元素类型的常量,并分成不同的组,放在Constant文件夹下面.

CommandNames Class(命令名类)

复合UI界面程序块使用命令来轻易地分配相同的可执行代码到多个用户界面元素。例如,你有一个工具栏按钮和一个菜单项,你可以相同的命令让它们执行相同的代码。每个命令都有一个唯一的字符串标识符。

下面的代码是下个简单的CommandNames类的声明

public class CommandNames
{
  public const string FindCustomer = "FindCustomer";
  public const string EnqueueVisitor = "EnqueueVisitor";
  public const string ServiceCustomer = "ServiceCustomer";
}

EventTopicNames Class (事件主题名称类)

复合UI界面程序块包括一个事件代理系统,可让你在WorkItem中发布事件,允许组件之间的通信。这个事件的名称是用一个字符串来标识。该eventtopicnames类包含的是全局应用程序事件主题的标识符的定义。

下面的是解决方案创建时初步实现的EventTopicNames类的代码,它定义了一个事件的主题名称“statusupdate”,它是一个当shell的状态面板更新时会触发的一个事件.

public class EventTopicNames
{
  /// <summary>
  /// Event raised to tell the shell to update the status panel.
  /// </summary>
  public const string StatusUpdate = "StatusUpdate";
}

UIExtensionSiteNames Class 

一个复合UI应用程序块的UIExtensionSite ,是一个已命名的用户界面元素,并可支持多个子元素。每个UIExtensionSite使用一个唯一确定的字符串值来定义。当这些子元素添加到site中相互作用时,这些字符串就用来识别这些元素,比如,把元素加入到菜单栏或菜单条时。该UIExtensionSiteNames类包含的是全局应用的UIExtensionSite标识符的定义

下面的是解决方案创建时初步实现的UIExtensionSiteNames类的代码,它包含了三个通过shell注册的UIExtensionSite的名称.

public class UIExtensionSiteNames
{
    /// <summary>
    /// The extension site for the main menu.
    /// </summary>
    public const string MainMenu = "MainMenu";

    /// <summary>
    /// The extension site for the main toolbar.
    /// </summary>
    public const string MainToolbar = "MainToolbar";

    /// <summary>
    /// The extension site for the main status bar.
    /// </summary>
    public const string MainStatus = "MainStatus";
}

WorkspaceNames Class 

工作区组件封装的是显示控制和SmartParts的一个特定的可视化的方式。每个Workspace由一个唯一字符串定义。WorkspaceNames类中定义了所有Workspace在全局应用程序中的标示符。

下面的是解决方案创建时初步实现的WorkspaceNames类的代码。如果你为shell选择创建一个单独的布局模块,那么LayoutWorkspace定义指的是ShellForm主要的Workspace,而ModalWindows定义是指用来显示模式对话框的WindowsWorkspace。LeftWorkspace和RightWorkspace常量对应于在ShellLayoutView视图定义的DeckWorkspaces(位于Infrastructure.Layout工程)或位于ShellForm里(如果你没有为Shell分开布置模块)。
public class WorkspaceNames
{
    public const string LayoutWorkspace = "LayoutWorkspace";
    public const string ModalWindows = "ModalWindows";
    public const string LeftWorkspace = "LeftWorkspace";
    public const string RightWorkspace = "RightWorkspace";
}

Business Entities(业务实体类)

该BusinessEntities 文件夹包含了一些业务实体类。这些类定义了不同的业务对象的实例,并在智能客户端程序不同模块间共享。

拿一个业务实体类举例来说,BusinessEntities文件夹下的Infrastructure.Interface工程,银行分行客户参考实现的接口方案。

Service Interfaces (服务接口)

Service文件夹包含公共服务的接口(在其它工程中的WorkItem可使用的服务)

EventArgs Class (事件参数类)

不同的事件句柄可以使用不同的参数类型。EventArgs类是一个类,允许你指定一个用于事件发布和订阅类型安全的描述。

public class EventArgs<T> : System.EventArgs
{
  private T _data;

  public EventArgs(T data)
  {
    _data = data;
  }

  public T Data
  {
    get { return _data; }
  }
}

把业务逻辑和WorkItem代码分离的类

WorkItemController 是包含WorkItem的抽象基类,这个类应该包含业务逻辑,否则业务逻辑就应包含在WorkItem中。你可以使用这个类从WorkItemController 和 WorkItem中来划分你的代码。当你使用新增业务模块模板创建一个新的复合UI应用程序块模块时,一个ModuleController类会自动添加到控制模块的WorkItem。这个类是一个专业化的WorkItemController类。

IWorkItemController 是 WorkItemController必须实现的一个接口,它只有一个方法

/// <summary>
/// Controller used by <see cref="ControlledWorkItem{TController}"/>.
/// </summary>
public interface IWorkItemController
{
  /// <summary>
  /// Called when the controller is ready to run.
  /// </summary>
  void Run();
}

ControlledWorkItem 代表一个WorkItem是由另一个类管理。这另一个类包含了控制器和业务逻辑(WorkItem提供了容器)

/// <summary>
/// Represents a WorkItem that uses a WorkItem controller to perform its
/// business logic.
/// </summary>
/// <typeparam name="TController"></typeparam>
public sealed class ControlledWorkItem<TController> : WorkItem
{
  private TController _controller;

  /// <summary>
  /// Gets the controller.
  /// </summary>
  public TController Controller
  {
    get { return _controller; }
  }

  /// <summary>
  /// See <see cref="M:Microsoft.Practices.ObjectBuilder.IBuilderAware.OnBuiltUp(System.String)"/> for more information.
  /// </summary>
  public override void OnBuiltUp(string id)
  {
    base.OnBuiltUp(id);

    _controller = Items.AddNew<TController>();
  }
}

Presenter Base Class

这个类包含的代码会在你使用MVP模式中每一个的Presenter中出现。它包括一个基本的视图和相关的WorkItem,此外它还提供虚拟工作方法的控制视图。

ActionAttribute

此属性用于指定代码段是一个业务动作。每当你使用ObjectBuilder创建一个对象时,它的策略就是给每一个方法加上这个属性时,使之成为一个业务动作。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class ActionAttribute : Attribute
{
  private string _actionName;

  public ActionAttribute(string actionName)
  {
    _actionName = actionName;
  }

  public string ActionName
  {
    get { return _actionName; }
    set { _actionName = value; }
  }
}

抱歉!评论已关闭.