最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP三層結(jié)構(gòu)(上) 簡(jiǎn)單三層結(jié)構(gòu)

 更新時(shí)間:2010年07月04日 22:08:22   作者:  
我們以一個(gè)簡(jiǎn)單的留言板代碼為例,先來(lái)看一個(gè)最簡(jiǎn)單的三層結(jié)構(gòu)代碼
如代碼1所示:
復(fù)制代碼 代碼如下:

// 代碼 1
// 外觀層類(lèi)
class LWordHomePage {
// 添加留言
public function append($newLWord) {
// 調(diào)用中間服務(wù)層
$serv = new LWordServiceCore();
$serv->append($newLWord);
}
};
// 中間服務(wù)層
class LWordServiceCore {
// 添加留言
public function append($newLWord) {
// 調(diào)用數(shù)據(jù)訪問(wèn)層
$dbTask = new LWordDBTask();
$dbTask->append($newLWord);
}
};
// 數(shù)據(jù)訪問(wèn)層
class LWordDBTask {
// 添加留言
public function append($newLWord) {
// 數(shù)據(jù)層代碼(省略)
}
};

執(zhí)行時(shí)序圖,如圖1所示:

(圖1),簡(jiǎn)單三層結(jié)構(gòu)時(shí)序圖

 

從代碼和時(shí)序圖中可以直觀看出三層結(jié)構(gòu)的調(diào)用順序。但實(shí)際開(kāi)發(fā)中這種簡(jiǎn)單三層結(jié)構(gòu)并不能滿(mǎn)足需求!我們先從外觀層與中間服務(wù)層這兩層的代碼開(kāi)始討論。在外觀層LWordHomePage類(lèi)中直接使用new關(guān)鍵字創(chuàng)建并調(diào)用中間服務(wù)類(lèi)LWordServiceCore屬于一種硬編碼的方式。在實(shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中,外觀層和中間服務(wù)層可能會(huì)由不同的人員來(lái)開(kāi)發(fā),即一個(gè)功能模塊由多個(gè)人共同完成。而外觀層LWordHomePage類(lèi)的開(kāi)發(fā)進(jìn)度是不可能等到LWordServiceCore類(lèi)完全開(kāi)發(fā)完成之后才開(kāi)始(換句話來(lái)說(shuō)就是,外觀層不可能等到中間服務(wù)層完全開(kāi)發(fā)完成之后才開(kāi)始),這樣的協(xié)作效率非常低!為了使項(xiàng)目可以由多人同時(shí)開(kāi)發(fā),所以我們要切割代碼設(shè)計(jì)。我們可以組織一個(gè)臨時(shí)的中間服務(wù)類(lèi)來(lái)滿(mǎn)足外觀層的開(kāi)發(fā)進(jìn)度。等到中間服務(wù)層完全開(kāi)發(fā)完成之后,替換一下就可以了……如圖2所示:

 

 

(圖2),外觀層在不同的服務(wù)間切換

 

顯然,要實(shí)現(xiàn)這樣的需求,在外觀層中直接使用new關(guān)鍵字創(chuàng)建和調(diào)用LWordServiceCore類(lèi)是非常不靈活的!這很難做到靈活的隨意的切換??!我們可以創(chuàng)建TempService類(lèi)充當(dāng)中間服務(wù)層的臨時(shí)實(shí)現(xiàn)。我們還需要分析一下TempService和LWordServiceCore這兩個(gè)類(lèi),它們都具備相同的append函數(shù)用于添加留言,只不過(guò)一個(gè)是臨時(shí)的而另外一個(gè)是真實(shí)的。既然TempService和LWordServiceCore這兩個(gè)類(lèi)都有公共函數(shù),那么就應(yīng)該可以有一個(gè)公共的父類(lèi)??紤]到對(duì)這個(gè)公共的上級(jí)類(lèi)沒(méi)有別的成員和屬性,所以將這個(gè)公共的上級(jí)類(lèi)定義為接口,即ILWordService!UML類(lèi)圖如圖3所示:


 

(圖3)定義和實(shí)現(xiàn)ILWordService接口

在LWordHomePage類(lèi)中并不直接創(chuàng)建TempService或者LWordServiceCore類(lèi)對(duì)象,創(chuàng)建過(guò)程會(huì)交給一個(gè)工廠類(lèi)MyServiceFactory(簡(jiǎn)單工廠模式)。這樣一來(lái),外觀層中的LWordHomePage類(lèi)只需要知道ILWordService接口即可,外觀層代碼并不關(guān)心具體的中間服務(wù)代碼是什么,這樣就極好的實(shí)現(xiàn)了外觀層與具體服務(wù)代碼的分離。

這相當(dāng)于什么呢?就好比兩個(gè)硬件工程師,一個(gè)是制造計(jì)算機(jī)顯卡的,一個(gè)是制造計(jì)算機(jī)主板的。制造顯卡的工程師可以把顯卡插到到一塊測(cè)試電路中,來(lái)測(cè)試顯卡是否可以正常工作?同樣,制造主板的工程師也可以把主板插入到另一塊測(cè)試電路中,來(lái)測(cè)試主板是否可以正常工作?等到這兩位工程師都各自完成工作之后,將他倆的工作成果對(duì)接在一起就可以了。這是一種并行開(kāi)發(fā)方式,幾乎可以省掉一半的時(shí)間。從軟件工程的角度來(lái)講,我們?cè)谠O(shè)計(jì)接口代碼的時(shí)候也應(yīng)該考慮是否需要支持多人同時(shí)開(kāi)發(fā),從而提高生產(chǎn)效率。

依照UML類(lèi)圖(如圖3所示),我們修改PHP代碼如代碼2所示:

復(fù)制代碼 代碼如下:

// 代碼2, 通過(guò)工廠創(chuàng)建留言服務(wù)并調(diào)用
// 外觀層類(lèi)
class LWordHomePage {
// 添加留言
public function append($newLWord) {
// 調(diào)用中間服務(wù)
$serv = MyServiceFactory::create();
// 注意此時(shí)是操作 ILWordService 接口, 而非 LWordService 類(lèi)
$serv->append($newLWord);
}
};

// 留言服務(wù)接口
interface ILWordService {
public function append($newLWord);
};

// 服務(wù)工廠類(lèi)
class MyServiceFactory {
// 創(chuàng)建留言服務(wù)
public static function create() {
if (1) {
// 返回中間服務(wù)層
return new LWordServiceCore();
} else {
// 返回臨時(shí)實(shí)現(xiàn)
return new TempService();
}
}
}

// 臨時(shí)服務(wù)類(lèi)
class TempService implements ILWordService {
// 添加留言
public function append($newLWord) {
// 臨時(shí)代碼(省略)
}
};

// 中間服務(wù)層
class LWordServiceCore implements ILWordService {
// 添加留言
public function append($newLWord) {
// 調(diào)用數(shù)據(jù)訪問(wèn)層
$dbTask = new LWordDBTask();
$dbTask->append($newLWord);
}
};

// 數(shù)據(jù)訪問(wèn)層
class LWordDBTask {
// 添加留言
public function append($newLWord) {
// 數(shù)據(jù)層代碼(省略)
}
};


時(shí)序圖如圖4所示:

 

(圖4)通過(guò)工廠類(lèi)創(chuàng)建留言服務(wù)

相關(guān)文章

  • PHP基于新浪IP庫(kù)獲取IP詳細(xì)地址的方法

    PHP基于新浪IP庫(kù)獲取IP詳細(xì)地址的方法

    這篇文章主要介紹了PHP基于新浪IP庫(kù)獲取IP詳細(xì)地址的方法,涉及php正則、curl及編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • php多進(jìn)程模擬并發(fā)事務(wù)產(chǎn)生的問(wèn)題小結(jié)

    php多進(jìn)程模擬并發(fā)事務(wù)產(chǎn)生的問(wèn)題小結(jié)

    這篇文章主要給大家介紹了關(guān)于php多進(jìn)程模擬并發(fā)事務(wù)產(chǎn)生的問(wèn)題,文中通過(guò)示例代碼介紹的非常想吃詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • PHP 地址欄信息的獲取代碼

    PHP 地址欄信息的獲取代碼

    主要是獲取到地址欄的一些信息,域名,端口參數(shù)等
    2009-01-01
  • 利用PHP抓取百度閱讀的方法示例

    利用PHP抓取百度閱讀的方法示例

    最近在百度閱讀上購(gòu)買(mǎi)了一本《永恒的終結(jié)》電子書(shū),但是坑爹的發(fā)現(xiàn)只能在線閱讀或者在手機(jī)app上閱讀,不能下載下來(lái)放到kindle里。于是就嘗試一下看能不能把這個(gè)文章下載下來(lái)。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • 什么是PHP文件?如何打開(kāi)PHP文件?

    什么是PHP文件?如何打開(kāi)PHP文件?

    什么是PHP文件?如何打開(kāi)PHP文件?這篇文章主要為大家詳細(xì)介紹了解php文件以及如何打開(kāi)php文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • PHP中的use關(guān)鍵字概述

    PHP中的use關(guān)鍵字概述

    這篇文章主要介紹了PHP中的use關(guān)鍵字,需要的朋友可以參考下
    2014-07-07
  • php heredoc和phpwind的模板技術(shù)使用方法小結(jié)

    php heredoc和phpwind的模板技術(shù)使用方法小結(jié)

    Heredoc技術(shù),在正規(guī)的PHP文檔中和技術(shù)書(shū)籍中一般沒(méi)有詳細(xì)講述,只是提到了這是一種Perl風(fēng)格的字符串輸出技術(shù)。但是現(xiàn)在的一些論壇程序,和部分文章系統(tǒng),都巧妙的使用heredoc技術(shù),來(lái)部分的實(shí)現(xiàn)了界面與代碼的準(zhǔn)分離,phpwind就是一個(gè)典型的例子。
    2008-03-03
  • 解析如何通過(guò)PHP函數(shù)獲取當(dāng)前運(yùn)行的環(huán)境 來(lái)進(jìn)行判斷執(zhí)行邏輯(小技巧)

    解析如何通過(guò)PHP函數(shù)獲取當(dāng)前運(yùn)行的環(huán)境 來(lái)進(jìn)行判斷執(zhí)行邏輯(小技巧)

    本篇文章是對(duì)如何通過(guò)PHP函數(shù)獲取當(dāng)前運(yùn)行的環(huán)境 來(lái)進(jìn)行判斷執(zhí)行邏輯的技巧進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 如何讓thinkphp在模型中自動(dòng)完成session賦值小教程

    如何讓thinkphp在模型中自動(dòng)完成session賦值小教程

    在項(xiàng)目中遇到一個(gè)問(wèn)題,需要讓thinkphp在模型中自動(dòng)完成session賦值,經(jīng)過(guò)一番研究,終于實(shí)現(xiàn),下面記錄一下,另附上thinkPHP的session的相關(guān)知識(shí)
    2014-09-09
  • PHP 數(shù)組遍歷方法大全(foreach,list,each)

    PHP 數(shù)組遍歷方法大全(foreach,list,each)

    php下最靈活的東西都是數(shù)組,很多數(shù)據(jù)都是通過(guò)數(shù)組的方式顯示,這里整理下數(shù)組的遍歷方法,大家可以根據(jù)需要選用。
    2010-06-06

最新評(píng)論

乐清市| 吴川市| 金坛市| 霍林郭勒市| 闸北区| 仪征市| 三河市| 清河县| 横峰县| 赞皇县| 孟州市| 藁城市| 金坛市| 河南省| 高雄县| 江陵县| 五峰| 德惠市| 淮北市| 靖江市| 治多县| 沈阳市| 余干县| 牙克石市| 教育| 丽江市| 茶陵县| 依兰县| 祁连县| 饶平县| 滨海县| 彰化市| 湄潭县| 白山市| 贵港市| 林口县| 博白县| 资阳市| 乌鲁木齐市| 黄冈市| 韩城市|