2012-01-06 7 views
3

私はPHPの背景から来て、Wordpressのに非常に多く使用されてきた、私はどのように彼らのプラグインアーキテクチャ作品やイベントにイベントをフックする機能を愛し名前。私が気に入っている最良の部分の1つは、エンドユーザーに表示される直前に任意のデータベース値に* add_filter()*を実行できることです。私の質問は、C#.NET環境でプラグインアーキテクチャ全体をどのように複製するかについての複数の部分です。リストベースのC#(Wordpressのフック/フィルター)でパターンをサブスクライブパブリッシュ

パート1: はプラグインを作成するには、私ははおそらく最高だろうMEF枠組みを研究している(マネージド拡張フレームワーク -http://mef.codeplex.com/)。これは、新しいプラグインのディレクトリを監視し、依存関係やその他の通常の事柄を追跡する機能を提供することにより、不満を解消するように特別に設計されています。 MEFは.NET 3.5以上で出荷されます

パート2 フッキングイベント?グローバルなチャンネルベースのイベントシステムを複製することに関する多くの情報を見つけることはできないようです。私が今までに持っているものから、公開/購読パターン(具体的なオブジェクトを作成してイベントを与えるだけではそれほど難しくありません)が必要です。難しい部分は、各イベントに「チャネル」名を与え、システム全体のすべてのイベントをグローバルコレクション(メディエータパターン)の一部にすることです。複製する

:(http://codex.wordpress.org/Function_Reference/add_filter)

例1

// Add's my button to the end of the content 
add_filter('the_content', 'my_plugin_button'); 

function my_plugin_button($content) { 
    // Add's my button to the end of the content 
    return $content . "<a href='#'>My button</a>"; 
} 

OR

例2

// Add a new admin menu item by hooking in 
add_action('admin_menu', 'my_plugin_menu'); 

function my_plugin_menu() { 
    add_options_page('My Plugin Options', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options'); 
} 

Iは私といっしょにあなたのすべてを願っていますか?私はJavaScriptで必要な機能を複製するために管理しているとさえjQueryのは、彼らの.on()イベント機能...同じことが、ベースのチャネルまたはリスト...

私の2例があります。

誰もが正しい方向に私を指すか、これは、C#のためのば完全に間違ったアプローチであることはできますか?

答えて

0

私はNServiceBusがあなたにこれらの問題で多くを助けることができると思います。 NServiceBusの著者であるUdi Dahanも、パブリッシュ/サブスクライブのメカニズムであるドメインイベントパターンに関する記事を多数作成しています。

+0

返信いただきありがとうございます。しかし、私はオープンソースのソリューションやリストベースのイベントシステムの単純なレプリケーションにもっと傾いています。誰か他のアイディアを持っていますか? – Aaron

0

あなたがこれを投稿してから長いことを知っていて、すでに何かを構築している可能性があります。しかし、私はこのようなことについて自分自身を考えてきました。2つのオプションがあります - 実際にワードプレスを忘れて、よりクリーンな何かをしようとして構築する - それは、WordPressのコードの下部に混乱です:D

またはこの:

function the_content() 
{ 
     var result = get_the_content(); 
     // do other stuff...if you want to. 
     execute_filters(ref result); 
     execute_actions(ref result); 

     return result; 
} 

function execute_filters(ref string result, string action_name) 
{ 
    var filters = get_pre_filters(action_name); 
    filters.ForEach(filter => 
    { 
     /// somehow call the method name in filter. PHP is generally global. C# namespaced,  
     /// so you would need to think about that. 
    } 
} 

function execute_actions(ref string result, string action_name) 
{ 
     /// and so on.... 
} 

ワードプレスを模倣するために何かを構築するには、 WordPressのプラグインアーキテクチャーの多くの問題を覚えておく必要があります。私の個人的な意見では...そのページがそのプラグインとは関係がなくても、すべてのページで十分に近いところですべてのプラグインを実行したいと思われます。私は、各ページ呼び出しに60のデータベースクエリを追加したプラグインをインストールしましたが、それは使用されませんでした。

あなたがそれを構築しているときにそれについてスマートに考えてみてください。試して、新しい設定のページ/投稿で使用されるプラグインのみを実行する方法を追加してください。あなたのデータベースでは、そのページで実行できるプラグインのリストを持つポスト/ページオブジェクトに「プラグイン」フィールドがあります。そうすれば、毎回すべてのプラグインをチェックして、実行したいかどうかを確認する必要はありません。

とにかく。あなたは何かが働くことを願っています。

関連する問題