第12回 Net_UserAgent_Mobile クラス - 携帯端末情報取得ライブラリ (3) - PEAR講座
くまっち先生のPEAR講座
Lecutures on PHP
第12回 Net_UserAgent_Mobile クラス - 携帯端末情報取得ライブラリ (3) (その3)
テンプレートメソッド
先ほど紹介した各携帯会社クラスは、「Net_UserAgent_Mobile_Common」という別のクラスを基底クラスに構え、各クラスで継承し構築されています。
getNameやisDoCoMoなどのメソッドで取得できる情報はシチュエーションによって異なりますが、メソッドそのものはどんな場合でも提供されるものです。このようなケースでは、基底クラス側にメソッド名の定義を行い、それを継承する各クラスでそのメソッドが正しく利用できるよう準備しておくことで、共通インターフェースとしての提供がしやすくなります。
このような手法は「テンプレートメソッド」と呼ばれ、今回紹介したFactoryとの親和性も高く合わせ業としてよく利用される手法です。リスト8のように用いられ利用されます。
リスト8. テンプレートメソッド利用例(抜粋)
class Net_UserAgent_Mobile_Common
{
function getName()
{
return $this->name;
}
}
class Net_UserAgent_Mobile_DoCoMo extends Net_UserAgent_Mobile_Common
{
// $this->name が DoCoMo となるように準備する
}
class Net_UserAgent_Mobile_EZWeb extends Net_UserAgent_Mobile_Common
{
// $this->name が EZWeb となるように準備する
}
開発者と利用者の双方にやさしいつくりを
今回のこのFactoryを用いることで、ライブラリの開発者に対して、そしてライブラリの利用者に対しても利点は大きいものであるといえます。
ライブラリ開発者にとってみれば、前述したとおり内容に応じてクラスを分離しており必要な情報および処理コードのみを記述することができます。これは混在する異なる情報と入り乱れる分岐処理、そして該当する種類ごと(今回では携帯会社)に登場する処理ブロックという煩雑コードの呪縛を解き放ってくれます。
またライブラリの利用者に対しては、異なる端末の異なる情報を同じメソッド名、つまり共通インターフェースで情報が参照できるようなっており、使い勝手のよい仕組みを提供することができます。携帯会社に依存するような特定のメソッドなども存在していますが、汎用的な情報を取得するための機能は携帯会社の違いを全く意識することなく利用することが可能です。
実はこの手法は、PEARの中だけでもNet_UserAgent_Mobileだけでなく、データベース接続およびクエリを取り扱うDB、MDBなどでも用いられています。
データベース向けライブラリでは、データベースの種類(PostgreSQL ,MySQL, SQLiteなどなど)をそれぞれ個別のクラスとして準備し、利用しようしているデータベースに応じてfactory時に生成するクラスを切り替えるようしています。生成後、すなわちデータベース接続後に利用するメソッド名も各データベースごとで共通にしつつ、実際にはクラスごとに異なる処理を行うようしています。データベースの違いを許容しつつも使い勝手の違いを意識させない工夫が見られます。
第12回まで続けてきた本PEAR講座ですが今回で終了となります。
PEARライブラリは利用側として接している方が(日本国内のPEARライブラリ開発者は数名ですので)ほとんどかと思われますが、PEARに限らずライブラリとしてプログラムを作成し提供するという行為はどなたでも可能なことです。それが世界に向けてという大きな規模ではなく、日本国内、プロジェクト参加者、会社内、さらには自分のみに対してという小さな規模だとしても、プログラムを作成し実際に利用してもらうという行為に規模以外の違いはありません。
そのプログラムに手をいれ修正し拡張することは実は大変であるということは、一度でもプログラムの提供を行われた方はご存知かと思います。利用者にとって使い勝手のよいものか、また開発者にとって手の入れやすいものか。頭を悩ませた方も多いのではないでしょうか。
そんな問題を解決するための1つの手段が、先人の行ったプログラムの手法を拝借することです。あの凄いプログラマーのコードを知りテクニックを身につけることで、少しだけ悩みがなくなるかもしれませんよ。
ご覧いただきありがとうございました。
その他の記事も見る
- 第1回 File クラス - ファイル操作のテクニック
- 第2回 HTTP クラス - RFCに従ったプロトコル通信
- 第3回 HTTP_Header クラス - ヘッダフィールドを扱う
- 第4回 HTTP_Download クラス - ダウンロード支援ライブラリ
- 第5回 HTTP_Download クラス - ダウンロード支援ライブラリ (2)
- 第6回 Net_URL クラス - URL構築ライブラリ
- 第7回 Net_Socket クラス - ソケット通信用ライブラリ
- 第8回 HTTP_Request クラス - HTTPリクエスト支援ライブラリ
- 第9回 HTTP_Request クラス - HTTPリクエスト支援ライブラリ (2)
- 第10回 Net_UserAgent_Mobile クラス - 携帯端末情報取得ライブラリ
- 第11回 Net_UserAgent_Mobile クラス - 携帯端末情報取得ライブラリ (2)
- 第12回 Net_UserAgent_Mobile クラス - 携帯端末情報取得ライブラリ (3)
- >>「くまっち先生のPEAR講座」一覧ページに戻る
- くまっち先生
本名:熊倉 洋介 株式会社アイサイト所属
電子、ネットワーク技術を経て現在のWebアプリケーション開発の世界へ。システム設計およびコーディングがメインで、趣味の範囲内を仕事として行うことができることに感謝しながら過ごす日々。関西を中心に、勉強会やセミナーといった PHP 技術者向けコミュニティで活動を続けており、現在はPiece Frameworkプロダクトへコミットメント中。





ページのトップへ


SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。