一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - PHP三層結(jié)構(gòu)(上) 簡單三層結(jié)構(gòu)

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

2019-11-03 19:42php教程網(wǎng) PHP教程

我們以一個簡單的留言板代碼為例,先來看一個最簡單的三層結(jié)構(gòu)代碼

如代碼1所示: 

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


// 代碼 1 
// 外觀層類 
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ù)訪問層 
$dbTask = new LWordDBTask(); 
$dbTask->append($newLWord); 

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

}; 


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

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

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

 

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

 

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

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

 

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

 

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

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

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

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

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

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


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

}; 

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

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




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

}; 

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

}; 

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

}; 

 

 

時序圖如圖4所示:

 

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一区二区三区久久小说 | 99精品国产成人一区二区在线 | 亚洲免费在线观看 | 欧美yw193.c㎝在线观看 | 成年人在线视频免费观看 | 亚洲AV久久无码精品九号软件 | 免费国产成人α片 | 高清麻生希在线 | 日本视频在线免费观看 | 含羞草传媒网站免费进入欢迎 | 羞羞色男人的天堂伊人久久 | 日本xnxnxnxnxn护士 | 我与白丝同桌的故事h文 | 国产欧美日韩专区毛茸茸 | 美女和男人差差 | 国产精品亚洲专区在线播放 | 千金肉奴隶在线观看 | 亚州精品永久观看视频 | 国产精品久久久久影院色老大 | 97精品久久天干天天蜜 | 成人先锋| 天天色天天色天天色 | 日本小网站 | 国产一区在线播放 | 三级小说网站 | tube69中国露脸 | 欧美一区二区三区不卡视频 | 精品一区久久 | 精品一区二区三区 不卡高清 | 二次元美女脱裤子让男人桶爽 | 国产精品久久久久久影院 | 精品一久久香蕉国产二月 | 草草草在线 | 欧美xxx000喷水 | 国产大神91一区二区三区 | 精品视频一区二区三区免费 | 韩国三级动漫 | 校花在公车上被内射好舒 | 毛片免费网站 | 201天天爱天天做 | 国产免费一区二区 |