← 回到文章

数据源架构模式之表数据入口

数据源架构模式之表数据入口 【表数据入口的意图】 充当到数据库表的入口的对象。一个实例处理表中的所有行。 表数据入口包含了用于访问单个表或视图的所有SQL,如CRUD等。其它的代码调用它的方法来实现所有与数据库的交互。 【表数据入口的适用场景】 1、表数据入口可以同表模块一起使用。 2、适用于事务脚本处理 【表数据入口的运行机制】 表数据入口的实现非常简单,一般会包括几个从数据库中获取数据的查找方法以及更新,插入和删除方法。 每个方法都将输入参数映射为一个SQL调用并在数据库连接上执行该语句。 【表数据入口的优点和缺点】 1、简单。表数据入口可能是使用起来最简单的数据库接口模式。 2、为数据源的精确访问逻辑提供了一种自然的方法。 3、相同的接口即可以用于SQL操作操作数据库,又可以用于存储过程。 【表数据入口的PHP示例】
     */
    public function findAll() {
        $sql = "SELECT * FROM person";
        return DB::query($sql);
    }

    /**
     * 根据名字查找人员数据
     * @param  $name
     * @return 
     */
    public function findByName($name) {
        $sql = "SELECT * FROM person WHERE `name` = '" . $name . "'";
        return DB::query($sql);
    }

    /**
     * 更新人员数据
     * @param  $key   关键字
     * @param  $data  需要更新的数据, 例如:$data = array('id' => 1, 'name' => 'Martin', 'birthday' => '');
     */
    public function update($id, $data) {
        if (empty($id) || !is_array($data)) {
            return FALSE;
        }

        $sql = "UPDATE person SET ";
        foreach ($data as $field => $value) {
            $sql .= "`" . $field . "` = '" . $value . "',";
        }
        $sql = substr($sql, 0, -1);

        $sql .= " WHERE id = " . $id;

        return DB::query($sql);
    }

    /**
     * 插入人员的数据
     * @param  $data 需要写入的数据, 例如:$data = array('name' => 'Martin', 'birthday' => '');
     */
    public function insert($data) {
        if (!is_array($data)) {
            return FALSE;
        }

        $sql = "INSERT INTO person ";
        $sql .= "(`" . implode("`,`", array_keys($data)) . "`)";
        $sql .= " VALUES('" . implode("','", array_values($data)) . "')";

        return DB::query($sql);
    }

}

class DB {

    /**
     * 这只是一个执行SQL的演示方法
     * @param string $sql   需要执行的SQL
     */
    public static function query($sql) {
        echo "执行SQL: ", $sql, " 
"; } } /** * 客户端调用 */ class Client { /** * Main program. */ public static function main() { $person = new PersonGateway(); header("Content-type:text/html; charset=utf-8"); $data = array('name' => 'Martin', 'birthday' => '2010-09-15'); $person->insert($data); $id = 1; $data['id'] = $id; $person->update($id, $data); $person->findAll(); $person->findByName('Martin'); } } Client::main(); ?>
如上所示代码仅为一个演示版本 然而这个演示版本有一些可以优化的地方,如:将更新和插入的SQL拼装过程可以提取出来等。 数据表接口是一个很简单的数据源模式,这在我们平常的工作中也有用到,有可能看起来与上面的例子相差较大,但是可能只是将某些方法进行了优化而已,究其本质是一样的。
最后更新于 2010-09-21 08:49:47