2012年5月27日星期日

NChain 0.1 项目但愿是根救命稻草

NChain 0.1 项目但愿是根救命稻草

本文内容

  • 概述
  • 架构

 

最近做个项目,有流程控制。也就是,执行一个流程,依赖该流程前面的流程。写着写着发现,目前的结构扩展性不太好,耦合得太紧,更要命是代码不易控制,调试也有困难——很困惑。想来想去,觉得改进成 NChain 的方式似乎可以解决我目前的困境。

下面是 NChain 的结构。

 

概述

Chain.NET(又称 NChain),是 "Chain Of Resposibility" (CoR) 职责链模式在 .NET 和 Mono 平台上的一个实现。

这个库的概念来自于 Java 平台的 Jakarta's Commons Chain。

Chain.NET 解决方案把标准的职责链模式(CoR design pattern )与命令模式(Command design pattern )相结合,以方便灵活地处理命令。

Chain.NET 库提供了适当接口,用来扩展标准的 CoR。

架构

1

接口

Chain.NET 库里有几个基本的接口,它们可以实现标准的 CoR 模式。如下:

  • ICommand
  • IFilter
  • IChain
  • IContext

ICommand 接口表示执行的(考虑完成特定的执行状态)工作单元。

IFilter 接口通过 postProcess 方法扩展标准的 ICommand,该方法总是由 IChain 执行,当 IFilterexecute 方法执行完后执行。

IChain 接口表示 ICommand 有序集合,需要处理特定的 IContext。它扩展标准的 ICommand 接口。

IContext 接口表示执行对 command 可用的上下文环境(状态信息)。在同一个 IChaincommand,可以抛出(抛出异常)它来互相通信,或返回执行结果。

基类
  • ChainBase 类——IChain 接口的基类实现

该类提供基本的“链”功能。通过把 context 传递给“链”中的 command,处理特定的 context。

该类提供 addCommand 和 removeCommand 方法添加新的 command 到 “链”和从“链”中删除 command。

  • ContextBase 类——IContext 接口的基类实现

该类继承 System.Collection.Hashtable 类。提供标准的 context 功能。

  • CommandBase

抽象的 CommandBase 类提供两个常量,用来标识命令的执行结果。

对于“链”的 command,可以不继承该类。command 可以返回定义在该类中的常量(true/false),以标识执行状态。

下载 Demo 运行 nchain 里的 RuntimeInstantiation 例子需要 Spring.Net

下载 Spring.Rest-1.1.0.zip

下载 springsource-tool-suite


TAG: