PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP高级编程 >> 高级应用 >> 

PHP设计模式介绍 第十五章 表数据网关模式

PHP设计模式介绍 第十五章 表数据网关模式

来源:互联网  作者:  发布时间:2010-05-22
前一章中使用动态记录模式对数据库表进行建立,获取,更新(通

以数组形式返回记录集

无论什么时候实现一个表数据网关类,你都要选择一种数据结构来呈现从相关方法中获取的数据集。PHP中常用于表示此数据结构的术语是返回行的哈稀向量(以0为起始的数组),就是一个关联数组,由字段=>值成对组成。

在BookmarkGateway通过ADOconnection获得这样一个数据结构是很简单的,因为ADOResultSet::getArray()方法几乎采用的是相同的术语来表示(即返回一个关联数组)。

例如,这里findAll()可方法返回整个表数据网关类中表的内容。

class  BookmarkGateway  {
//  ...
public  function  findAll()  {
$rs  =  $this->conn->execute(‘select  *  from  bookmark’);
if  ($rs)  {
return  $rs->getArray();
}  else  {
trigger_error(‘DB  Error:  ‘.$this->conn->errorMsg());
}
}
}

简单与否,都需要测试一下:

class  TableDataGatewayTestCase  extends  BaseTestCase  {
//  ...
function  testFindAll()  {
$gateway  =  new  BookmarkGateway(DB::conn());
$this->addSeveralBookmarks($gateway);
$result  =  $gateway->findAll();
$this->assertIsA($result,  ‘Array’);
$this->assertEqual(5,  count($result));
}
}

如果你想做得更多,你可以检查一下返回的每一行。

class  TableDataGatewayTestCase  extends  BaseTestCase  {
//  ...
function  testFindAll()  {
$gateway  =  new  BookmarkGateway(DB::conn());
$this->addSeveralBookmarks($gateway);
$result  =  $gateway->findAll();
$this->assertIsA($result,  ‘Array’);
$this->assertEqual(5,  count($result));
$this->assertIsA($result[0],  ‘Array’);
$this->assertEqual(7,  count($result[1]));
$expected_keys  =  array(
‘id’
,’url’
,’name’


,’description’
,’tag’
,’created’
,’updated’);
$this->assertEqual(
$expected_keys
,array_keys($result[3]));
}
}

(索引0,1,和3 都是随机选的,可以是返回的五行中的任意一行),因为在返回的集合中的值是你初始化时存储的值(假设是这样),你也能建立一个实验来直接对数据值进行比较。

class  TableDataGatewayTestCase  extends  BaseTestCase  {
//  ...
function  testFindAll()  {
$gateway  =  new  BookmarkGateway(DB::conn());
$this->addSeveralBookmarks($gateway);
$result  =  $gateway->findAll();
//  ...
$this->assertEqual(‘PHP  homepage’,  $result[1][‘name’]);
$this->assertEqual(‘http://google.com/’,  $result[3][‘url’]);
}
}

返回可迭代的对象集合

数组是PHP内置的数据类型,并且PHP提供了大量的数组函数,使得在你的程序中使用数组非常方便。然而,你有可能希望以对象而不是数组的形式返回结果集。实际上,返回数据载体对象(数据的基本容器,也包含业务逻辑)的集合是很寻常的,ADOResultSET()方法恰好证实了这一点。让我们建立一个查找方法,可根据“tag”字段的值来查询数据,因为这个例子基于PHP5,让我们也要求返回的结果集可迭代(参见第八章,迭代模式),用PHP的foreach结构就能使用该结果集了。


延伸阅读:
从魔兽看PHP设计模式
《PHP设计模式介绍》导言
PHP设计模式介绍 第一章 编程惯用法
PHP设计模式介绍 第二章 值对象模式
PHP设计模式介绍 第三章 工厂模式
PHP设计模式介绍 第四章 单件模式
PHP设计模式介绍 第五章 注册模式
PHP设计模式介绍 第六章 伪对象模式
PHP设计模式介绍 第七章 策略模式
PHP设计模式介绍 第八章 迭代器模式


PHP设计模式介绍 第九章 观测模式
PHP设计模式介绍 第十章 规范模式
PHP设计模式介绍 第十一章 代理模式
PHP设计模式介绍 第十二章 装饰器模式
PHP设计模式介绍 第十三章 适配器模式
PHP设计模式介绍 第十四章 动态记录模式
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号