江川

摘 要:在如今需求快速迭代,代碼規模不斷膨脹的趨勢下,傳統的Web應用開發模式已經無法滿足快速開發的要求,為了解決代碼規模的危機,先進的開發理論應運而生。該文基于YAF這一PHP開發中流行的MVC框架進行改進,對YAF的Model模塊進行內部分層,并對基于YAF的系統開發進行研究。實際表明,將系統進行分層,每層對應不同職責,系統開發模塊化,易于維護擴展。
關鍵詞:YAF框架 分層 模塊化
中圖分類號:TP302 文獻標識碼:A 文章編號:1672-3791(2017)03(a)-0029-02
傳統Web系統開發后端服務業務邏輯簡單,代碼沒有明顯模塊化,業務邏輯與數據訪問雜糅在一起,隨著需求逐漸復雜化,逐漸無法應對代碼規模的擴張,需要良好設計的開發框架進行規范化,使系統易于維護擴展,節省人力與經濟成本。MVC與N層架構等理論的發展,使得現代軟件的開發更加規范化與工程化,作為解決軟件危機的有效方法,將界面表示、業務邏輯以及數據的處理進行模塊劃分,使各模塊各司其職,模塊之間職責劃分清晰,架構易于理解與維護。YAF框架是基于MVC架構的開發框架,它專注于在“最小性能損耗”與“良好的模塊封裝”中尋求平衡點,改進的YAF框架則將分層架構應用到YAF的Model中,使得YAF框架可以適應越來越龐大的系統架構。
1 YAF框架核心架構
與傳統MVC框架相同,View負責用戶界面展示;Controller負責處理與用戶進行交互的部分,得到Model的數據后可將數據返回給View;Model表示數據和業務相關處理,并且可將數據返回給controller,一個典型的YAF框架的代碼編寫如下所示。
(1) 控制器application/controllers/Index.php
class IndexController extends Yaf_Controller_Abstract {
public function indexAction() {//默認Action
$model = new ContentModel();
$this->getView()->assign("content", $model->getContent());
}
}
(2) 視圖application/views/index/index.phtml
<?php echo $content;?>
(3) 視圖application/model/Content.php
class ContentModel {
public function getContent() {
return “Hello World”;
}
}
2 改進YAF
可以看到YAF作為一種MVC框架,把系統拆分為“視圖、控制器”與“數據模型”三個模塊,已經對數據的表示進行了解耦,但Model層中依然可以既包含對業務邏輯的處理,也包含針對數據源(可以為數據庫或文本文件等)的訪問處理,使得對業務邏輯與數據的處理仍然混雜,難以維護,此時我們將Model進一步分層。針對Model的數據處理,我們可以繼續分為“頁面邏輯層、數據服務層”以及“數據訪問對象”,如圖1所示。
2.1 數據訪問對象(DAO)
一個DAO對應一張表上具體的、無邏輯的CRUD操作,通常會有多個方法,每個方法對應這張表上的一個操作,負責向數據服務層提供對數據進行訪問的接口。
2.2 數據服務層(Data Service)
數據服務層在DAO這一層的基礎上提供一個原子功能的接口封裝,按主題提供數據操作服務給頁面服務層調用,該層中主要負責對數據進行加工,例如時間字段的格式化、通過調用不同DAO進行數據組合后處理以及對數據進行緩存等操作。
2.3 頁面服務層(Page Service)
頁面服務層主要是在數據服務層提供的數據提供接口上,進行與具體頁面的業務邏輯相關的操作,同時可以進行對數據的合法性與安全性校驗。
3 改進后YAF的應用
改進后的YAF目錄針對架構進行了細化,一個典型的改進后YAF框架的代碼編寫如下所示。
(1)控制器application/controllers/Index.php。
<?php
class ControllerIndex extends Yaf_Controller_Abstract {
public function IndexAction() {
$object = new Service_Page_Index();
return $object->execute();
}
}
(2)頁面服務層 application/model/service/page/Index.php。
class Service_Page_Index {
public function execute() {
$object = new Service_Data_Index();
return $object->getHelloData();
}
}
(3)數據服務層 application/model/service/data/Index.php。
class Service_Data_Index {
public function getHelloData() {
$object = new Dao_Index();
return $object->getData();
}
}
(4) 數據訪問對象 application/model/dao/Index.php。
class Dao_Index extends Lib_Dao{
public function getData() {
$this->useTable(‘Table)
return $object->getData();
}
}
4 結語
該文對YAF框架的架構進行了針對Model層的改進,使其層次更加清晰,更適合應用到大規模系統開發中。對Model進行分層使得模塊松耦合,不僅系統架構更加清晰,易于理解,而且開發人員在維護系統時只需要針對某一層進行修改,只要接口規范不改變,那么修改其中一層不會影響其他層,節省了維護成本。
參考文獻
[1] (美)斯賓奈利斯,著.架構之美[M].王海鵬,等,譯.北京:機械工業出版社,2010.
[2] (美)埃斯波西托,薩爾塔列洛,著.Microsoft .NET企業級應用架構設計[M].陳黎夫,譯.北京:人民郵電出版社,2010.