江川
摘 要:在如今需求快速迭代,代码规模不断膨胀的趋势下,传统的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.