Send to your Kindle RIGHT:[[:t/プラグイン]] MediaWikiのフックは本体を拡張する仕組み。でも目的に合うフックを探さないといけない。 本体を拡張するなら、ビルトインな機能もプラグインとして実装。プラグインの入れ替えで本体に手を加えられるようにする。パッチを当てるのもプラグインごとに。 特定のpublicメソッド(この仕組みに対応しているメソッド。API)の実行前後に、プラグイン内で定義されている"pre"、"post"付きメソッドを実行。(preで呼ばれたプラグインとは逆の順序でpostを持つプラグインを呼び出し) - RenderDocument_Pre (プラグインAの) - RenderDocument_Pre (プラグインBの) - RenderDocument (本体の) - RenderDocument_Post (プラグインBの) - RenderDocument_Post (プラグインAの) どのメソッドも同じインターフェイスで宣言。 これでも目的に合うAPIを探さないといけない。実行順序をドキュメントにしておくか、どんなユースケースであっても呼び出されたAPIをログやビュー上に出力できるように。それを読んでAPI探し。出力には引数名も載せて何をしているか分かりやすく。PerlのSmart::Commentsのようなことができれば理想的。 つまり、どのpublicメソッドもフックをかけられるようにするということ。 [[→:WebHook]] アスペクト指向のように。 *** プラグインのフック [#m8e10d82] プラグインが独自にフックを実装するのもあり。でもそれはプラグインにできることしか提供できない。 RIGHT:[[:t/プラグイン]] MediaWikiのフックは本体を拡張する仕組み。でも目的に合うフックを探さないといけない。 本体を拡張するなら、ビルトインな機能もプラグインとして実装。プラグインの入れ替えで本体に手を加えられるようにする。パッチを当てるのもプラグインごとに。 特定のpublicメソッド(この仕組みに対応しているメソッド。API)の実行前後に、プラグイン内で定義されている"pre"、"post"付きメソッドを実行。(preで呼ばれたプラグインとは逆の順序でpostを持つプラグインを呼び出し) - RenderDocument_Pre (プラグインAの) - RenderDocument_Pre (プラグインBの) - RenderDocument (本体の) - RenderDocument_Post (プラグインBの) - RenderDocument_Post (プラグインAの) どのメソッドも同じインターフェイスで宣言。 これでも目的に合うAPIを探さないといけない。実行順序をドキュメントにしておくか、どんなユースケースであっても呼び出されたAPIをログやビュー上に出力できるように。それを読んでAPI探し。出力には引数名も載せて何をしているか分かりやすく。PerlのSmart::Commentsのようなことができれば理想的。 つまり、どのpublicメソッドもフックをかけられるようにするということ。 [[→:WebHook]] アスペクト指向のように。 *** プラグインのフック [#m8e10d82] プラグインが独自にフックを実装するのもあり。でもそれはプラグインにできることしか提供できない。