まず、次のようにアーキテクチャ間の関係を簡単に述べます:
まず、標準 DAL クラス (STDAL) を設計し、getData、delete、update などの標準共通関数を配置します。
プログラムで使用されるさまざまな DAL を設計するときは、基本的にすべてのテーブルを DAL で実装する必要があります。後で、テーブル アプリケーションや画面のプレゼンテーションなどのニーズに応じて、テーブルに複数の DAL を含めることもできます。ビューと同様の概念です。
ビジネス ロジックの動作に従って、挿入および更新前のデータ チェックなど、対応する BLL が生成されます。この部分はさまざまなビジネス アプリケーションによって異なるため、以下では説明しません。
将来的には、DAL エンティティの作成を支援するために特別に使用される DAL プロダクション ファクトリ (DALFactory) が存在する予定です。これは、負荷を軽減するために、DAL プログラム ファイルが別のホストや別のディレクトリの場所などに配置される可能性があるためです。したがって、DAL 作成メソッドは DALFactory
に均一にカプセル化されています。
次に、上記に従って次のプログラムを構築しました:
STDAL.php
1 <?php 2 class STDAL 3 { 4 public $TableName; 5 6 public function __construct() { 7 echo $this->TableName." init STDAL<br>"; 8 } 9 10 public function getData() 11 { 12 print "select * from ".$this->TableName."<br>"; 13 } 14 15 public function setDB($db) 16 { 17 echo $db."<br>"; 18 } 19 } 20 ?>
STUser.php
1 <?php 2 class DAL_STUser extends STDAL 3 { 4 public function __construct() { 5 $this->TableName = "STUser"; 6 parent::__construct(); 7 } 8 } 9 ?>
STDoc.php
1 <?php 2 class DAL_STDoc extends STDAL 3 { 4 public function __construct() { 5 $this->TableName = "STDoc"; 6 parent::__construct(); 7 } 8 } 9 ?>
以下の DAL 生成ファクトリーは、「PHP - カテゴリの予備調査」で述べた手法を使用しています。興味のある方はぜひご覧ください。
DALFactory.php
1 <?php 2 class DALFactory 3 { 4 private static $db; 5 6 public static function getInstance($prgName) { 7 8 if(!self::$db) { 9 self::$db = $prgName." get DB connection"; 10 } 11 $class = "DAL_$prgName"; 12 $obj = new $class(); 13 $obj->setDB(self::$db); 14 return $obj; 15 } 16 } 17 ?>
以上でデータアクセス層の作成は完了です。次に、正常に動作するかテストしてみます。
test.php
1 <?php 2 $prgName = "STUser"; 3 $obj = DALFactory::getInstance($prgName); 4 $obj->getData(); 5 6 $prgName = "STDoc"; 7 $obj = DALFactory::getInstance($prgName); 8 $obj->getData(); 9 ?>
テスト結果は次のとおりです:
STUser init STDAL
STUser が DB 接続を取得
select * from STUser
STDoc init STDAL
STUser が DB 接続を取得
select * from STDoc