搜索
首页php教程php手册《PHP设计模式介绍》第十五章 表数据网关模式

使用动态记录模式对数据库表进行建立,获取,更新(通过扩展实现删除)每一行的操作。动态记录模式是一种简单的抽象数据库连接的方式,但是这种简洁性也正是它的弱点。动态记录类只处理单一的行,使得它在需要呈现大量信息的WEB应用中显得效率很低,如旅游预

使用动态记录模式对数据库表进行建立,获取,更新(通过扩展实现删除)每一行的操作。动态记录模式是一种简单的抽象数据库连接的方式,但是这种简洁性也正是它的弱点。动态记录类只处理单一的行,使得它在需要呈现大量信息的WEB应用中显得效率很低,如旅游预约,在线购物等。在这一类应用――几乎是主流的WEB应用中,数据集的使用就是更普遍更流行的。

问题

怎样才能简单的操作数据库表与表中的所有记录?

解决方案

表数据网关模式集成了动态记录模式。实际上,这个新模式的大多数代码都借签于14章动态记录模式的代码(它重用了一样的DB类与BOOKMARK TABEL DDL常量,并且也用ADOdb作为操纵数据的代码库)。然而,表数据网关模式集中于整表――记录集而不是单个的记录。

样本代码

让我们从建立操作开始,该操作完成向表中增加新记录。测试用例函数TableDataGatewayTestCase::testAdd() 完成向书签数据表中增加两条URL数据记录的步骤要求。它很大程度上参照了14章ActiveRecordTestCase::testAdd()方法,但它也其显著不同的地方,在于引入了一个新的BookmarkGateway这个表数据网关类。

class  TableDataGatewayTestCase  extends  UnitTestCase  {
function  testAdd()  {
$gateway  =  new  BookmarkGateway($conn  =  DB::conn());
$gateway->add(
‘http://simpletest.org/’,
‘SimpleTest’,
‘The  SimpleTest  homepage’,
‘testing’);
$gateway->add(
‘http://blog.casey-sweat.us/’,
‘My  Blog’,
‘Where  I  write  about  stuff’,
‘php’);
$rs  =  $this->conn->execute(‘select  *  from  bookmark’);
$this->assertEqual(2,$rs->recordCount());
$this->assertEqual(2,$conn->Insert_ID());
}
}

类似于动态记录,表数据网关测试用例示例了一个模板类,并增加一些记录到数据库。然而表数据网关模的工作对象是整张表,你只需建立一个该模式对象,并重用该对象对就能向数据表中增加更多的新记录。

这儿是BookmarkGateway一个可行的实现。

class  BookmarkGateway  {
protected  $conn;
public  function  __construct($conn)  {
$this->conn  =  $conn;
}
const  INSERT_SQL  =  “
insert  into  bookmark  (url,  name,  description, tag,  created,  updated)
values  (?,  ?,  ?,  ?,  now(),  now())
“;
public  function  add($url,  $name,  $description,  $group)  {
$rs  =  $this->conn->execute(
self::INSERT_SQL
,array($url,  $name,  $description,  $group));
if  (!$rs)  {
trigger_error(‘DB  Error:  ‘.$this->conn->errorMsg());
}
}
}

以上代码看上去很熟悉,动态记录模式与表数据网关模式的基本框架是相仿的:INSERT SQL 语句,函数参数表,对数据库错误的处理等都与动态记录模式的add()方法一次处理一条记录相类似。

建立了实现CRUD操作的代码后,现在来讨论如何获取数据。

测试用例结构

因为表数据网关的目的是处理具有多条记录的数据库表,你很有可能需要一个方便有效的方法来初始化表,使得在运行每一个实验时数据表都处于一个已知的状态。快速的解决方案是为每个实验建立一个基类,包括两个有用的方法:setup()与addSeveralBookmark,用来为每个实验重建已打乱的表和载入一些数据。

如下就是名为BaseTestCase的类

class  BaseTestCase  extends  UnitTestCase  {
protected  $conn;
function  __construct($name=’’)  {
$this->UnitTestCase($name);
$this->conn  =  DB::conn();
}
function  setup()  {
$this->conn->execute(‘drop  table  bookmark’);
$this->conn->execute(BOOKMARK_TABLE_DDL);
}
function  addSeveralBookmarks($gateway)  {
//  add(url,  name,  desc,  tag)
$gateway->add(‘http://blog.casey-sweat.us/’
,’Jason\’s  Blog’
,’PHP  related  thoughts’
,’php’);
$gateway->add(‘http://www.php.net/’
,’PHP  homepage’
,’The  main  page  for  PHP’
,’php’);
$gateway->add(‘http://slashdot.org/’
,’/.’
,’News  for  Nerds’
,’new’);
$gateway->add(‘http://google.com/’
,’Google’
,’Google  Search  Engine’
,’web’);
$gateway->add(‘http://www.phparch.com/’
,’php|architect’
,’The  home  page  of  php|architect,
an  outstanding  monthly  PHP  publication’
,’php’);
}
}

现在,每一个测试用例都源自BaseTestCase并继承它的构造器,一个setup()方法与一个addSeveralBookmarks()方法来预装一些数据。

http://www.chinaz.com/program/2008/0614/31068.shtml
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境