• 会员登陆 | 会员注册

    博客 | 论坛 | 统计 |

  • 返回首页
    当前位置: 主页 > 网站编程 > PHP编程 >

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

    时间:2010-01-12 00:57来源:未知 作者:admin 点击:次
    前一章中使用动态记录模式对数据库表进行建立,获取,更新(通过扩展实现删除)每一行的操作。动态记录模式是一种简单的抽象数据库连接的方式,但是这种简洁性也正是它的弱点。动态记录类只处理单一的行,使得它在需要呈现大量信息的WEB应用中显得效率很低,
      

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

    问题 !

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

    解决方案 版权申明:本站文章均来自网络,如有侵权,请联系028-86262244-215,我们收到后立即删除,谢谢!

    表数据网关模式集成了动态记录模式。实际上,这个新模式的大多数代码都借签于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()方法来预装一些数据。 .

    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线----------------------------
    最新评论 查看所有评论
    发表评论 查看所有评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    用户名: 密码: 验证码:
    发布者资料
    admin 查看详细资料 发送留言 加为好友 用户等级:高级会员 注册时间:2010-01-09 12:01 最后登录:2010-01-12 00:01
    推荐内容
    热点内容