BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース .NET Chain of Responsibilityライブラリ

.NET Chain of Responsibilityライブラリ

Chain.NET(別称NChain)(リンク)は、.NETおよびMonoプラットフォーム向けのChain Of Responsibilityデザインパターン(リンク)の汎用実装である。SourceForgeで利用可能なバージョン0.1(リンク)は標準CoRデザインパターンをCommandデザインパターンと結合して、「コマンド処理ソリューションに利便性や柔軟性をもたらす」。

NChainは、Javaプラットフォームで利用可能なJakartaのCommons Chainパッケージ(リンク)に大まかに基づいている。一般にCoRは、一連の処理オブジェクトからコマンドオブジェクトを分離することで、疎結合を推進するため に使用されるパターンである。それぞれの処理オブジェクトにはコードがあり、受け入れることが出来るコマンドオブジェクトのタイプを記述する。また、非互 換のオブジェクト処理の責務を、チェーンの次のプロセッサに委任する。

単純なCoRパターンの例(リンク)は以下のとおりである。

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は実行可能なようである。

原文はこちらです:http://www.infoq.com/news/2008/09/nchain

この記事に星をつける

おすすめ度
スタイル

BT