SOY CMS / SOY Shop

ブログトップ

SOY2フレームワークの解説 1回目 SOY2DAO(1/2)

2010年04月08日

「SQLを書きたくないけど書きたい時もある」

1回目は開発速度の向上にとって重要なSOY2DAOの解説を行います。

 

DAOはData Access Objectの略です。
SOY2フレームワーク上ではデータベースへのアクセスは全てSOY2DAOを使用します。


・出来る限りSQLは書かない
・複雑なSQLを書く必要のある場合の手助けとなる
・設定ファイルは書かない

の2点を目的に開発を行いました。

自動生成だけ、もしくは自動生成かSQL直書きの2択の場合は不都合なことが多いです。

複雑なSQLを自動生成させる場合、自動生成させるために設定ファイルを作るライブラリなどもあります。その場合はSQLのスキルに加え、設定ファイルを書くスキルが新たに必要になって来ます。これでは本末転倒です。

SOY2DAOでは、データの検索部分などはフレームワークに途中までSQLを作らせ、複雑なwhere句は手動で構築するという解決法を提案しています。


○基本的な設計

SOY2DAOにおいて重要なのはEntityクラスとDAOクラスです。

Entityクラスはテーブル(orビュー)と1:1で対応するクラスです。

商品情報を保存するためのテーブルを想定して解説していきます。

create table sample_item(
	id integer primary key,
	name varchar,
	price integer,
	sample_item_information varchar
);


-sample_itemテーブルと対応するEntityクラス
/**
 * @table sample_item
 */
class Item{
    /**
      * @id
      */
    private $id;
    private $name;
    private $price;
    
    /**
      * カラム名と変数名が異なる場合
      * @column sample_item_information
      */
    private $information;
	
	//getter setter
}


classのコメントに@tableでテーブル名を記述、主キーに対応する変数にコメントで@idを記述します。
テーブルのカラム名とクラスの変数名が一致しない場合は@columnでカラム名を設定します。

sample_itemにアクセスし、CRUD処理を行うDAOを定義します。

/**
  * @entity Item
  */
abstract class ItemDAO extends SOY2DAO{
    /**
      * @return id
      */
	abstract function insert(Item $item);
	abstract function update(Item $item);
	abstract function delete($id);
	
	abstract function get();
	abstract function getById($id);
	
}


これだけの記述で追加、更新、削除、全て取得、IDを指定して取得全ての処理を行うことが出来ます。基本的な処理に関してはコメント無しでも動作するようになっています。

このItemDAOは次のように使うことが出来ます。

$dao = SOY2DAOFactory::create("ItemDAO");
$dao->insert(new Item());
$items = $dao->get();

$item = $dao->getById(1);
$item->setName("サンプル商品");
$dao->update($item);

$dao->delete($item->getId());


このようにテーブルの情報はEntityクラスに、SQLの情報はDAOに書いていきます。
これによりテーブルの情報に変動があったとしてもDAO側を修正する必要が無くなりました。

次回以降、DAOに記述することで自動生成可能なSQLのパターンを解説します。