NChainは、Javaプラットフォームで利用可能なJakartaのCommons Chainパッケージ(リンク)に大まかに基づいている。一般にCoRは、一連の処理オブジェクトからコマンドオブジェクトを分離することで、疎結合を推進するため に使用されるパターンである。それぞれの処理オブジェクトにはコードがあり、受け入れることが出来るコマンドオブジェクトのタイプを記述する。また、非互 換のオブジェクト処理の責務を、チェーンの次のプロセッサに委任する。
単純なCoRパターンの例(リンク)は以下のとおりである。
using System;NChainは似ているが、より堅固なアーキテクチャを提供している。
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は実行可能なようである。