第12回 Net_UserAgent_Mobile クラス - 携帯端末情報取得ライブラリ (3) - PEAR講座

PHP基礎編

くまっち先生の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つの手段が、先人の行ったプログラムの手法を拝借することです。あの凄いプログラマーのコードを知りテクニックを身につけることで、少しだけ悩みがなくなるかもしれませんよ。

ご覧いただきありがとうございました。

  • くまっち先生

本名:熊倉 洋介 株式会社アイサイト所属

電子、ネットワーク技術を経て現在のWebアプリケーション開発の世界へ。システム設計およびコーディングがメインで、趣味の範囲内を仕事として行うことができることに感謝しながら過ごす日々。関西を中心に、勉強会やセミナーといった PHP 技術者向けコミュニティで活動を続けており、現在はPiece Frameworkプロダクトへコミットメント中。

ご意見・感想フォーム

今回の「くまっち先生のPEAR講座」への評価・ご意見があればご記入下さい。

評価:
ご意見・感想:

  



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

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

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)