数据源架构模式之表数据入口
【表数据入口的意图】
充当到数据库表的入口的对象。一个实例处理表中的所有行。
表数据入口包含了用于访问单个表或视图的所有SQL,如CRUD等。其它的代码调用它的方法来实现所有与数据库的交互。
【表数据入口的适用场景】
1、表数据入口可以同表模块一起使用。
2、适用于事务脚本处理
【表数据入口的运行机制】
表数据入口的实现非常简单,一般会包括几个从数据库中获取数据的查找方法以及更新,插入和删除方法。
每个方法都将输入参数映射为一个SQL调用并在数据库连接上执行该语句。
【表数据入口的优点和缺点】
1、简单。表数据入口可能是使用起来最简单的数据库接口模式。
2、为数据源的精确访问逻辑提供了一种自然的方法。
3、相同的接口即可以用于SQL操作操作数据库,又可以用于存储过程。
【表数据入口的PHP示例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | <?php /** * 企业应用架构 数据源架构模式之表数据入口 2010-09-18 sz * @author phppan.p#gmail.com http://www.phppan.com * 哥学社成员(http://www.blog-brother.com/) * @package architecture */ class PersonGateway { /** * 查询所有人员数据 * @return <type> */ public function findAll() { $sql = "SELECT * FROM person"; return DB::query($sql); } /** * 根据名字查找人员数据 * @param <type> $name * @return <type> */ public function findByName($name) { $sql = "SELECT * FROM person WHERE `name` = '" . $name . "'"; return DB::query($sql); } /** * 更新人员数据 * @param <type> $key 关键字 * @param <type> $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 <type> $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, " <br />"; } } /** * 客户端调用 */ 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拼装过程可以提取出来等。
数据表接口是一个很简单的数据源模式,这在我们平常的工作中也有用到,有可能看起来与上面的例子相差较大,但是可能只是将某些方法进行了优化而已,究其本质是一样的。