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。
架构
接口
Chain.NET 库里有几个基本的接口,它们可以实现标准的 CoR 模式。如下:
- ICommand
- IFilter
- IChain
- IContext
ICommand 接口表示执行的(考虑完成特定的执行状态)工作单元。
IFilter 接口通过 postProcess 方法扩展标准的 ICommand,该方法总是由 IChain 执行,当 IFilter 的 execute 方法执行完后执行。
IChain 接口表示 ICommand 有序集合,需要处理特定的 IContext。它扩展标准的 ICommand 接口。
IContext 接口表示执行对 command 可用的上下文环境(状态信息)。在同一个 IChain 的 command,可以抛出(抛出异常)它来互相通信,或返回执行结果。
基类
- 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: