日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

PHP动态设计的设计流程,《PHP设计模式介绍》第十四章 动态记录模式

發(fā)布時(shí)間:2023/12/18 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP动态设计的设计流程,《PHP设计模式介绍》第十四章 动态记录模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

到目前為止,您所看到的這些設(shè)計(jì)模式大大提高了代碼的可讀性與可維護(hù)性。然而,在WEB應(yīng)用設(shè)計(jì)與開發(fā)中一個(gè)基本的需求與挑戰(zhàn):數(shù)據(jù)庫(kù)應(yīng)用,這些設(shè)計(jì)模式都沒有涉及到。本章與接下來的兩章—表數(shù)據(jù)網(wǎng)關(guān)與表數(shù)據(jù)映射,提供了三種設(shè)計(jì)模式使您能更好的組織你的應(yīng)用程序與數(shù)據(jù)庫(kù)進(jìn)行交互。

問題

大多數(shù)WEB應(yīng)用將信息持續(xù)保存在數(shù)據(jù)庫(kù)中。有將數(shù)據(jù)庫(kù)操作抽象化,以達(dá)到簡(jiǎn)化表數(shù)據(jù)存取和對(duì)業(yè)務(wù)邏輯的集成存取方法嗎?

解決方案

理論上,動(dòng)態(tài)記錄模式是最簡(jiǎn)化的有關(guān)數(shù)據(jù)庫(kù)的設(shè)計(jì)模式。動(dòng)態(tài)記錄模式包含了如何在類中直接實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互的相關(guān)知識(shí)。

動(dòng)態(tài)記錄模式在程序代碼與數(shù)據(jù)庫(kù)結(jié)構(gòu)之間產(chǎn)生了一種很高的結(jié)合度,在一些相對(duì)簡(jiǎn)單的應(yīng)用環(huán)境中,就能比采用別的復(fù)雜方案更容易解決這種因結(jié)合所產(chǎn)生的一些固有問題。動(dòng)態(tài)記錄模式也能滿足許多初級(jí)的數(shù)據(jù)庫(kù)項(xiàng)目。只有當(dāng)復(fù)雜性增加而難以用動(dòng)態(tài)記錄模式處理時(shí),你才有必要使用表數(shù)據(jù)網(wǎng)關(guān)模式(參見15章),或是數(shù)據(jù)地圖模式(參見16章)或是別的數(shù)據(jù)庫(kù)設(shè)計(jì)模式

企業(yè)級(jí)應(yīng)用架構(gòu)模式

根據(jù)Martin Fowler’s的著作《企業(yè)級(jí)應(yīng)用架構(gòu)模式》,所謂企業(yè)級(jí)應(yīng)用就是與別的應(yīng)用集成化,包含了重要的業(yè)務(wù)邏輯(或如應(yīng)用需求所呈現(xiàn)的非邏輯的東西),并且具有許多并發(fā)存取和保存從各種接口取得的數(shù)據(jù)。有趣的是,web應(yīng)用正好具備了上述多個(gè)特點(diǎn),這正好能解釋為什么Martin Fowler’s的著作能引起PHP程序員的強(qiáng)烈反響。

PHP數(shù)據(jù)對(duì)象

PDO是一個(gè)高性能的數(shù)據(jù)庫(kù)通道接口(并非數(shù)據(jù)庫(kù)抽象)。PDO是一個(gè)由C語言構(gòu)成的本地驅(qū)動(dòng)包,因此其速度是很快的。PDO為所有的PDO驅(qū)動(dòng)提供了申明,增強(qiáng)了腳本使用庫(kù)時(shí)的安全性。

樣本代碼

任何對(duì)數(shù)據(jù)庫(kù)連接的討論都依賴于對(duì)數(shù)據(jù)庫(kù)系統(tǒng)與對(duì)數(shù)據(jù)庫(kù)訪問層的選擇。本章與隨后兩章都使用MYSQL(http://www.mysql.com/)這個(gè)流行的開源數(shù)據(jù)庫(kù)及ADOdb (http://adodb.sf.net/)作為數(shù)據(jù)庫(kù)訪問層。我將ADOdb作為我自己工作室的標(biāo)準(zhǔn)是因?yàn)樗鼉?yōu)異的性能,且抽象了Oracle OCI接口,并提供了統(tǒng)一的訪問PostgreSQL, Sybase, MySQL和其它數(shù)據(jù)庫(kù)的接口,而成為了易于使用的PHP API,讓你專注于程序與業(yè)務(wù)邏輯的處理。

放心的替換你的自己的數(shù)據(jù)庫(kù)與訪問層,因?yàn)檫@里提出的許多概念也適合于別的解決方案。

在研究t動(dòng)態(tài)記錄模式之前,讓我們從基本的數(shù)據(jù)庫(kù)連接開始。有一個(gè)集中的,簡(jiǎn)單的方式去指定連接參數(shù)(主機(jī)名,用戶名,密碼,數(shù)據(jù)庫(kù))并建立一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象是很理想的。一個(gè)單一模式對(duì)象(參見第四章)就非常適合了。

這是一個(gè)DB類,其conn()方法返回一個(gè)單一模式的ADOConnection類的實(shí)例。

//? PHP5

require_once? ‘a(chǎn)dodb/adodb.inc.php’;

class? DB? {

//static? class,? we? do? not? need? a? constructor private? function? __construct()? {}

public? static? function? conn()? {

static? $conn;

if? (!$conn)? {

$conn? =? adoNewConnection(‘mysql’);

$conn->connect(‘localhost’,? ‘username’,? ‘passwd’,? ‘database’);

$conn->setFetchMode(ADODB_FETCH_ASSOC);

}

return? $conn;

}

}

DB類允許你設(shè)定數(shù)據(jù)庫(kù)的類型與連接參數(shù)。第一行代碼將ADOdb庫(kù)包含進(jìn)來(你可能需要根據(jù)你的實(shí)際環(huán)境來調(diào)整路徑);因?yàn)闆]有必要每次都實(shí)例化DB,所以DB的構(gòu)造函數(shù)是私有的; 行$conn->setFetchMode(ADODB_FETCH_ASSOC)設(shè)定對(duì)象返回的記錄集是以(字段名=>值)形式的關(guān)聯(lián)數(shù)組。與數(shù)據(jù)庫(kù)打交道中采用關(guān)聯(lián)數(shù)組是非常重要的經(jīng)驗(yàn)習(xí)慣,這樣您的代碼就不會(huì)受到因SQL語句中字段排序而產(chǎn)生的影響。

作為示例程序,讓我們建立一個(gè)Active Record對(duì)象來維護(hù)一個(gè)超鏈接表。以下是一個(gè)在MySQL數(shù)據(jù)庫(kù)中建立這個(gè)超鏈接表的SQL。

define(‘BOOKMARK_TABLE_DDL’,? <<

CREATE? TABLE? `bookmark`? (

`id`? INT? NOT? NULL? AUTO_INCREMENT? ,

`url`? VARCHAR(? 255? )? NOT? NULL? ,

`name`? VARCHAR(? 255? )? NOT? NULL? ,

`description`? MEDIUMTEXT,

`tag`? VARCHAR(? 50? )? ,

`created`? DATETIME? NOT? NULL? ,

`updated`? DATETIME? NOT? NULL? , PRIMARY? KEY? (? `id`? )

) EOS

);

實(shí)驗(yàn)的獨(dú)立性

各個(gè)實(shí)驗(yàn)間應(yīng)是相互獨(dú)立的;否則,僅僅是運(yùn)行了某一個(gè)實(shí)驗(yàn)就會(huì)影響到后續(xù)實(shí)驗(yàn)的結(jié)果。

為了避免這些都基于同一數(shù)據(jù)庫(kù)的實(shí)驗(yàn)間相互干擾,最好是在每個(gè)測(cè)試開始前刪除并重建相關(guān)表。以下簡(jiǎn)單的實(shí)驗(yàn)為后續(xù)實(shí)驗(yàn)提供了一種標(biāo)準(zhǔn)的setup方法。

以下代碼演示如何在每個(gè)實(shí)驗(yàn)開始前重置你的數(shù)據(jù)庫(kù):

class? ActiveRecordTestCase? 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);

}

}

這段代碼用一個(gè)標(biāo)準(zhǔn)的ADOConnection對(duì)象來給$conn的屬性賦值,并且使用了Connection的execute()方法來執(zhí)行SQL刪除與重建表的操作。因?yàn)檫@些代碼在一個(gè)名為setup()的方法中,使得每一個(gè)實(shí)驗(yàn)都能在一個(gè)新的數(shù)據(jù)庫(kù)環(huán)境中工作。

總結(jié)

以上是生活随笔為你收集整理的PHP动态设计的设计流程,《PHP设计模式介绍》第十四章 动态记录模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。