InfoQ

新闻

基于.NET的职责链模式类库——NChain

作者 Al Tenhundfeld 译者 赵劼 发布于 2008年10月5日 上午2时4分

社区
.NET
主题
松散耦合,
.NET框架,
面向对象设计
标签
Mono,
设计模式
Chain.NET(又名NChain)职责链模式在.NET和Mono平台上的一个实现。它的0.1版本(已可以在SourceForge中访问)结合了标准的职责链模式以及命令模式,目的是“为基于命令处理的功能提供一个方便而又灵活的解决方案”。

NChain松散地基于Java平台上的Jakarta的Commons Chain包。一般说来,职责链模式从一系列处理单元中分解出命令对象从而解耦。每个处理单元均包含相应的代码,以描述它可接受的命令对象的类型;另外它还会委托部分责任,用来处理与职责链上下一个处理单元不相匹配的对象。

以下是一个简单的职责链模式的示例

using System;
using System.Collections;
 
namespace Chain_of_responsibility
{
        public interface IChain
        {
                bool Process(object command);
        }
 
        public class Chain
        {
                private ArrayList _list;
 
                public ArrayList List
                {
                        get
                        {
                                return _list;
                        }
                }
 
                public Chain()
                {
                        _list = new ArrayList();
                }
 
                public void Message(object command)
                {
                        foreach ( IChain item in _list )
                        {
                                bool result = item.Process(command);
 
                                if ( result == true ) break;
                        }
                }
 
                public void Add(IChain handler)
                {
                        List.Add(handler);
                }
        }
 
        public class StringHandler : IChain
        {
                public bool Process(object command)
                {
                        if ( command is string )
                        {
                                Console.WriteLine("StringHandler can handle this message

: {0}",(string)command);
 
                                return true;
                        }
 
                        return false;
                }
        }
 
        public class IntegerHandler : IChain
        {
                public bool Process(object command)
                {
                        if ( command is int )
                        {
                                Console.WriteLine("IntegerHandler can handle this message

: {0}",(int)command);
 
                                return true;
                        }
 
                        return false;
                }
        }
 

 
        class TestMain
        {
                static void Main(string[] args)
                {
                        Chain chain = new Chain();
 
                        chain.Add(new StringHandler());                      
                        chain.Add(new IntegerHandler());
 
                        chain.Message("1st string value");
                        chain.Message(100);
                }
        }
}

NChain提供了一个比较类似,但更为强壮的架构。
NChain Diagram

NChain需要更进一步的测试以及性能监控,来确定它到底是否适用于企业应用架构。这是个开源项目,并且提供了有用的入门示例可供快速入门。目前看来,在各种考虑使用命令模式,并且需要根据上下文来执行不同类型命令的场景下,NChain都会有一定用武之地。

查看英文原文:.NET Chain of Responsibility Library

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。