BT

.NET Chain of Responsibilityライブラリ

| 作者: Al Tenhundfeld フォローする 0 人のフォロワー , 翻訳者 編集部 フォローする 0 人のフォロワー 投稿日 2008年9月23日. 推定読書時間: 6 分 |
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

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT