天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP三層結構(上) 簡單三層結構

如代碼1所示:
復制代碼 代碼如下:
// 代碼 1
// 外觀層類
class LWordHomePage {
// 添加留言
public function append($newLWord) {
// 調用中間服務層
$serv = new LWordServiceCore();
$serv->append($newLWord);
}
};
// 中間服務層
class LWordServiceCore {
// 添加留言
public function append($newLWord) {
// 調用數據訪問層
$dbTask = new LWordDBTask();
$dbTask->append($newLWord);
}
};
// 數據訪問層
class LWordDBTask {
// 添加留言
public function append($newLWord) {
// 數據層代碼(省略)
}
};

執行時序圖,如圖1所示:

(圖1),簡單三層結構時序圖

 

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

 

 

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

 

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


 

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

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

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

依照UML類圖(如圖3所示),我們修改php代碼如代碼2所示:
復制代碼 代碼如下:
// 代碼2, 通過工廠創建留言服務并調用
// 外觀層類
class LWordHomePage {
// 添加留言
public function append($newLWord) {
// 調用中間服務
$serv = MyServiceFactory::create();
// 注意此時是操作 ILWordService 接口, 而非 LWordService 類
$serv->append($newLWord);
}
};

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

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

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

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

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


時序圖如圖4所示:

 

(圖4)通過工廠類創建留言服務

php技術PHP三層結構(上) 簡單三層結構,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 在线视频av大全色久久 | 日本无码毛片一区二区手机看 | 日韩人妻精品久久日 | 97夜夜澡人人爽人人模人人喊 | 伊人久久大香线蕉综合电影网 | 亚洲精品无码不卡在线播HE | 国产精品欧美一区二区在线看 | 浪货嗯啊趴下NP粗口黄暴 | 国产精品久久久久久人妻精品流 | 成人影片迅雷下载 | 色欲天天婬色婬香影院 | c了瑜伽老师嗷嗷叫一节课视频 | 男女生爽爽爽视频免费观看 | 精品午夜久久福利大片免费 | 国产麻豆精品人妻无码A片 国产麻豆精品久久一二三 国产麻豆精品传媒AV国产在线 | 97在线观看成人免费视频 | 最新精品学生国产自在现拍 | 少妇精品无码一区二区三区 | 97人视频国产在线观看 | 日本熟妇乱妇熟色在线电影 | 久草视频在线观看免费4 | 影视先锋男人无码在线 | 国产精品18久久久久久白浆. | 99视频一区| 白白操在线视频 | 久久亚洲国产成人影院 | 伊人精品久久久大香线蕉99 | 久久久99精品成人片中文 | 国产精品麻豆高潮刺激A片 国产精品麻豆a在线播放 | 欧美精品高清在线观看 | 久久99精品国产免费观看 | 老阿姨才是最有V味的直播 牢记永久免费网址 | 欧美一区二区视频在线观看 | 综合网伊人 | 国产一及毛片 | 中文无码熟妇人妻AV在线 | 小小水蜜桃视频高清在线播放 | 日本男女动态图 | 国产ZZJJZZJJ视频全免费 | 男人吃奶摸下挵进去啪啪 | 女人张腿让男人桶免费 |