日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

《PHP設(shè)計模式介紹》第十五章 表數(shù)據(jù)網(wǎng)關(guān)模式_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:《PHP設(shè)計模式介紹》第十四章 動態(tài)記錄模式
到目前為止,您所看到的這些設(shè)計模式大大提高了代碼的可讀性與可維護(hù)性。然而,在WEB應(yīng)用設(shè)計與開發(fā)中一個基本的需求與挑戰(zhàn):數(shù)據(jù)庫應(yīng)用,這些設(shè)計模式都沒有涉及到。本章與接下來的兩章—

前一章中使用動態(tài)記錄模式對數(shù)據(jù)庫表進(jìn)行建立,獲取,更新(通過擴(kuò)展實(shí)現(xiàn)刪除)每一行的操作。動態(tài)記錄模式是一種簡單的抽象數(shù)據(jù)庫連接的方式,但是這種簡潔性也正是它的弱點(diǎn)。動態(tài)記錄類只處理單一的行,使得它在需要呈現(xiàn)大量信息的WEB應(yīng)用中顯得效率很低,如旅游預(yù)約,在線購物等。在這一類應(yīng)用――幾乎是主流的WEB應(yīng)用中,數(shù)據(jù)集的使用就是更普遍更流行的。

問題

怎樣才能簡單的操作數(shù)據(jù)庫表與表中的所有記錄?

解決方案

表數(shù)據(jù)網(wǎng)關(guān)模式集成了動態(tài)記錄模式。實(shí)際上,這個新模式的大多數(shù)代碼都借簽于14章動態(tài)記錄模式的代碼(它重用了一樣的DB類與BOOKMARK TABEL DDL常量,并且也用ADOdb作為操縱數(shù)據(jù)的代碼庫)。然而,表數(shù)據(jù)網(wǎng)關(guān)模式集中于整表――記錄集而不是單個的記錄。

樣本代碼

讓我們從建立操作開始,該操作完成向表中增加新記錄。測試用例函數(shù)TableDataGatewayTestCase::testAdd() 完成向書簽數(shù)據(jù)表中增加兩條URL數(shù)據(jù)記錄的步驟要求。它很大程度上參照了14章ActiveRecordTestCase::testAdd()方法,但它也其顯著不同的地方,在于引入了一個新的BookmarkGateway這個表數(shù)據(jù)網(wǎng)關(guān)類。

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());
}
}

類似于動態(tài)記錄,表數(shù)據(jù)網(wǎng)關(guān)測試用例示例了一個模板類,并增加一些記錄到數(shù)據(jù)庫。然而表數(shù)據(jù)網(wǎng)關(guān)模的工作對象是整張表,你只需建立一個該模式對象,并重用該對象對就能向數(shù)據(jù)表中增加更多的新記錄。

這兒是BookmarkGateway一個可行的實(shí)現(xiàn)。

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());
}
}
}

以上代碼看上去很熟悉,動態(tài)記錄模式與表數(shù)據(jù)網(wǎng)關(guān)模式的基本框架是相仿的:INSERT SQL 語句,函數(shù)參數(shù)表,對數(shù)據(jù)庫錯誤的處理等都與動態(tài)記錄模式的add()方法一次處理一條記錄相類似。

建立了實(shí)現(xiàn)CRUD操作的代碼后,現(xiàn)在來討論如何獲取數(shù)據(jù)。

測試用例結(jié)構(gòu)

因?yàn)楸頂?shù)據(jù)網(wǎng)關(guān)的目的是處理具有多條記錄的數(shù)據(jù)庫表,你很有可能需要一個方便有效的方法來初始化表,使得在運(yùn)行每一個實(shí)驗(yàn)時數(shù)據(jù)表都處于一個已知的狀態(tài)�?焖俚慕鉀Q方案是為每個實(shí)驗(yàn)建立一個基類,包括兩個有用的方法:setup()與addSeveralBookmark,用來為每個實(shí)驗(yàn)重建已打亂的表和載入一些數(shù)據(jù)。

如下就是名為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’);
}
}

現(xiàn)在,每一個測試用例都源自BaseTestCase并繼承它的構(gòu)造器,一個setup()方法與一個addSeveralBookmarks()方法來預(yù)裝一些數(shù)據(jù)。

分享:《PHP設(shè)計模式介紹》第十三章 適配器模式
接口的改變,是一個需要程序員們必須(雖然很不情愿)接受和處理的普遍問題。程序提供者們修改他們的代碼;系統(tǒng)庫被修正;各種程序語言以及相關(guān)庫的發(fā)展和進(jìn)化。我孩子的無數(shù)玩具中有一個簡要地描

共4頁上一頁1234下一頁
來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
相關(guān)PHP教程