検索
連載

「オンラインストア」完成へ向けて各ファイルを再構築今から始める MySQL入門(9)(1/4 ページ)

Share
Tweet
LINE
Hatena

 連載第8回の「外部キー制約を活用する」では、DTO・DAOパターンを使って作成した「簡易在庫管理システム」を「簡易オンラインストア」に統合する前提として、外部制約キーについて説明しました。外部制約キーを利用することにより、複数のテーブルにまたがる値を関連付けることができます。

 今回は、第5回「MySQLの基礎を学ぼう [サンプル開発編]」で作成した「簡易オンラインストア」をDTO・DAOパターンで再構築し、簡易在庫管理システムと統合していきます。これでオンライストアの大まかな処理を完成させます。

関連リンク:

連載 快速MySQLでデータベースアプリ!

http://www.atmarkit.co.jp/flinux/index/indexfiles/mysqlindex.html

連載 今から始める MySQL入門

http://www.atmarkit.co.jp/flinux/index/indexfiles/mysql5index.html


サンプルファイルの展開

 今回もサンプルアーカイブ「sample5.tgz」を利用します。ダウンロードは下記から可能です。インストール手順については前回の説明を参照してください。

サンプルダウンロード:

sample5のtarアーカイブ


 sample5.tgzを展開すると、インストールされるファイルは以下のようになります。

sample5のファイル構成

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

共通する処理を基底クラスに集約

 今回は、使用するMySQLのテーブルが増えたことに、DAOクラスも多くなっています。それぞれのDAOクラスについて、MySQLサーバへの接続手順や切断手順を個別に記述するのは非効率です。

 これを効率化する方法が、MySQL関連の共通する処理を「基底クラス」に集約することです。各DAOクラスは基底クラスを継承し、基底クラスのメソッドや値を使用できるようにします。

 例えば基底クラス「BaseDao.php」では、コンストラクタ/デストラクタ/MySQLサーバ接続手順/MySQLサーバ切断手順が定義されています。この基底クラスを継承したサブクラス「CountDao.php」でも、これらの手順を利用することができます。

 基底クラスを継承するには、CountDao.phpの2行目のように、クラス名の宣言に続けて「extends BaseDao」を付加します。BaseDao.phpのMySQLに関連するメソッドや値にはprotected修飾子を設け、メソッドや値の使用をそのクラスとサブクラスに限定します(注)

注:「public/private/修飾子なし」については、第6回「DAOパターンですっきりコーディング!」を参照してください。


基底クラスの実例

 では、基底クラスの使い方を見るために、BaseDao.phpとCountDao.phpのソースコードをのぞいてみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ただし、継承にも例外があります。コンストラクタ/デストラクタはサブクラスに継承されません。そのため、サブクラスでコンストラクタ/デストラクタを利用する場合は、あらためて定義する必要があります。

 サブクラスのCountDao.phpでは、親クラス(BaseDao.php)のコンストラクタを呼び出すように「parent::__construct();」を使用しています。デストラクタでも同様に、「parent::__destruct();」で親クラスのデストラクタを利用するよう記述しています。

 なお、SQLクエリの中で特別な意味を持つ文字列のエスケープ処理については、前回までは各処理の中で行っていました。今回は、それを各DAOの中で行うように修正を加えています。DAOの中では「mysqli->real_escape_string()」メソッドを使用し、よりMySQLサーバに則した特殊文字のエスケープを実施しています。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る