技术开发 频道

PHP应用程序架构浅谈

  6. 数据访问对象(Data Access Object, DAO)

  数据访问对象(DAO)的作用,主要是将数据库访问与其他代码相隔离。DAO应该是可以叠加(stacked)的,这样就有利于将来你再添加数据库缓存。每一个值对象的类,都应该有自己的DAO。

class PersonDAO {
    var $conn;

function PersonDAO(&$conn) {
      $this
->conn =& $conn;
    }

function save(&$vo) {
      
if ($v->id == 0) {
        $this
->insert($vo);
      }
else {
        $this
->update($vo);
      }
    }

function get($id) {
      #
execute select statement
      #create
new vo and call getFromResult
      #return vo
    }

function delete(&$vo) {
      #
execute delete statement
      #
set id on vo to 0
    }

#
-- private functions

function getFromResult(&vo, $result) {
      #fill vo from the database result
set
    }

function update(&$vo) {
      #
execute update statement here
    }

function insert(&$vo) {
      #generate id (from Oracle sequence
or automatically)
      #insert record into db
      #
set id on vo
    }
  }

  DAO通常应该部署以下方法:

* save:插入或更新一条记录
* get:取出一条记录
* delete:删除一条记录

  你可以根据自己的需要,添加其他DAO方法,常见的例子有isUsed()、getTop($n)、find($criteria)。

  但是,所有的DAO方法都应该与数据库操作有关,不应该执行其他操作。DAO只应该对一张表进行基本的select / insert / update,不应该包含业务逻辑。举例来说,PersonDAO就不应该包含向某人发送Email的代码。

  你可以写一个工厂函数,根据不同的类名,返回相应的DAO。

function dao_getDAO($vo_class) {

$conn
= db_conn('default'); #get a connection from the pool

switch ($vo_class) {

case "person": return new PersonDAO($conn);

case "newsletter": return new NewsletterDAO($conn);

...

}

}
0
相关文章