プラグインを実装させるための内部分岐構造

[ 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

Tag Cloud

005sh 3dプリンタ 930ca adsense adwords awesomenote bar bliki bootcamp brita canolite centos6.4 cheerz chrome cms cms開発プロジェクト css database dokuwiki dreamweaver dsi dtm e-p1 e-pl1 edv-01 entities.conf evernote evetnote exilim eye-fi fasteverxl filemaker fishmans flipboard fpdf fpdi ftp garageband gizmon glue=_><$mttagname$> google gw hp作成 htaccess ielectribe imac ims-20 ipad ipad2 iphone itunes iweb jazz joomla lifegame linux lumix mac macbook mixiモバイル movabletype mp3play musescore nokton nokton25mmf0.95 noteslate open.thumbshots.org photomess php plugin pocketwifi pv rewritebase rewritecond rewriteengine rewriterule rolleicord safari scansnap seo serenar smc tcpdf timemachine transmit twin-t twitter ustream vmware waon web webthumbs webデザイン wimax windows yahoo youtube あずきフォント おでん お年玉 お知らせ みなと祭 アイダホバーガー アニメ アルネ・ヤコブセン イベント ウサビッチ エヴァンゲリオン オナラ禁止令 オープンスクール ガレット クイズ コシナ ゴールデンウィーク ストーブ料理 ダイナミックレンジ テザリング テレバイダー トムヤムクム ニコニコ動画 ネット家計簿ココマネ バックライト バンダイチャンネル パンダオセロ ピアノ フィッシング プチコン プラグイン ホームページ ボウズ マイクロフォーサーズ マウントアダプタ マクドナルド メンズスカート メンテナンス ラチチュード ラ・カンパネラ リスト 三晃精機 三相3線 上関原発 下関 中国 中学受験 中西進学中 中西進学塾 久石譲 乾燥肌 二眼レフ 会計ソフト 価格.com 写真 冷凍野菜 冷凍食材 出汁 動画 北九州高専 卒塾生 卒業 単相3線 吉田カバン 味噌 味噌汁 営業 坂本龍一 大島商船 妃田智 子どもと読書 家庭学習支援 家計簿 小学生と英語 小論文の指導 嶺川貴子 川南造船所 川棚 差し入れ 広告デザイン 情報のインフレ 情報教育 愛の夢 扇風機 掃除機 携帯電話 放課後のプレアデス 教材作成 教科書 敬愛中 敬愛中学校 数学 数式 文字コード 日新館中 日明の湯 森鷗外 椅子 業務日報 楽の湯 楽譜 機動戦士ガンダム 正規表現 津和野 海苔 火災 炊飯器料理 甘き死よ、来たれ 発酵 相対性理論 確定申告 節約 篆刻 経費削減 縦書き 自主制作アニメ 自宅サーバ 自習室 著作権 蟲師 西南女学院中 誕生日がずれる 誠徳義塾 調律 買い物 軍事遺構 軍艦島 転入学 近況報告 迷惑メール 配布物 金剛地武志 門司学園中 門司港 附属小 陸上自衛隊高等工科学校 電気代 食費 餃子 高校入試 高校受験
 
http://studio-arz.com/bliki/2010-01/002051.html · 最終更新: 2011年01月25日 via MovableType 3.33-ja
 
RSS2.0
Clip to Evernote