プラグインを実装させるための内部分岐構造
[ Category : CMS開発プロジェクト ] 2010年01月23日 23:20
自分でも、まさかCMS開発プロジェクトなんてアホなことを言い出すとは思ってもみませんでした。でも、やると言ってしまったらやらないといけないですね…トホホ。
さてさて、計画初期の段階からプラグインのことを想定しておかないと、プラグインの入る余地がないコードができあがってしまいます。なので、今日はプラグインの実装ってどうやってやるのかを想像してみました(想像かよ…)。
プラグイン実装のための内部分岐構造を想像してみた
例えば、AAAという関数があるとします
function AAA(){ 関数の処理内容 }
そして、このAAAという関数に対してプラグインで機能拡張させたい場合のアプローチは3つあると思うんです。
- AAAという関数の直前に処理を追加する
- AAAという関数の直後に処理を追加する
- AAAという関数自体を使わないようにし、代替関数を使って処理をする
ということは、AAAという関数を使う前後に分岐構造を作ってあげるとイイことになりそうです
function AAA(){ 関数の処理内容(最終処理を除く直前まで) if (function_exists(post_AAA)){ post_AAA(); // AAAという関数の後に処理を追加するための「post_AAA()」があればそれを実行する } 関数の最終処理 } if (function_exists(pre_AAA)){ pre_AAA(); // AAAという関数の前に処理を追加するための「pre_AAA()」があればそれを実行する } if (function_exists(alt_AAA)){ alt_AAA(); // AAAという関数の代替関数である「alt_AAA()」があればそれを実行する }else{ AAA(); // 代替関数がなければ通常通りAAAを実行する }
実際はクラスを使うことになるでしょうから、class_existsで対応すればいいのかな? 要するに、AAAというクラスに対して処理を追加する場合は
- 直前に処理を追加する … pre_AAAというクラスをプラグイン内につくる
- 直後に処理を追加する … post_AAAというクラスをプラグイン内につくる
- 代替クラスで処理をする … alt_AAAというクラスをプラグイン内につくる
という設計で進めたらいいような気がします。普通一般的には、どんな設計をするのでしょうね?
Discussion
- 投稿する前に「Discussionのガイドライン」をご一読くださいませ。