基于MVC模式下的开发框架建设与改进
2017-06-07余杨奎
余杨奎
摘 要:计算机网络迅速发展,Web成为人们日常生活中一个重要平台,在网站上人们除了可以获得诸多最新资讯,还可以在线购物、投资理财以及档案管理等;企业也对Web系统更加依赖,因而web系统的开发备受人们关注,而PHP在Web开发中占据着重要地位。目前,传统的php开发模式把数据层代码、HTML表示层代码混合,无法适应系统开发的需求。本文结合信融天下互联网金融P2P网贷系统和湛江电大学生干部数字化档案系统的实现,对基于MVC设计模式的PHP实现—THINKPHP框架建设和改进,可以为PHP的开发提供了一个Web的应用程序框架,从开发框架上将Web应用程序进行分离,即表示层、业务逻辑层和数据访问层代码完全分开,并且可以在框架上为数据访问设置模型,提高了Web应用程序开发效率,使其可靠性、可扩展性、可维护性等特点得到增强。关键词:MVC设计模式;PHP;开发框架
0 引言
随着互联网迅猛发展,使得动态网站建设要求更高,在网站开发方式上传统的模式已经无法满足人们的需要,MVC模式对这个问题进行来了很好的解决[1]。MVC作为一种开发模式在解决大型Web项目问题上发挥了重要作用。PHP是一种专业的网站的开发语言,然而现有的PHP开发模式尚未有成熟、统一的规范,系统水平的高低取决于开发人员的专业素质及经验等,已经无法满足人们在开发效率、可扩展性、可靠性及可维护性等方面快速房展的需求[2]。因而把框架机制引入PHP的开发成为人们关注的重点。
1 MVC设计模式
1.1 MVC设计模式在Web中的应用
MVC(Model-View-Controller)把数据处理、数据表示及程序输入输出控制进行分离,对不同部分对象间的通信方式进行了描述,使其不受其它数据模型及其方法的影响,从而让程序结构更加清晰并具有灵活性[3]。MVC把应用程序的输入、输出、处理强行分离,MVC的应用程序分为模型、控制器及视图三个部件[4]。MVC组件的功能及关系如图1所示。
Web应用程序从传统意义上来说一般都是由ASP/PHP进行创建的。它们把数据层代码、HTML表示层代码混合,即便开发者经验丰富、水平较高,从表示层把数据分离也具有一定的困难[5]。MVC把它们从根本上进行了强制分离,虽然MVC的构造工作量变大,但仍就有诸多优点。其一,具有低耦合性。视图层、业务层分离,视图层代码更改不需要对模型、控制器代码进行修改。同样,改变业务流程或者规则只要对MVC的模型改动就可以,不需要更改视图层代码。模型和控制器、视图是分离的,因而应用程序的数据层及业务规则改变十分容易。其二,具有高重用性、可适用性。科学技术水平不断提高,访问应用程序的方式变得多种多样。同样一个服务器端的代码MVC模式可以让多种视图进行访问如Web浏览器等。模式只能够对数据未格式化的部分进行返回,因而为不同界面的使用提供了便利。其三,具有快速开发的能力,MVC模式可以让界面设计人员对表现形式更加关注,程序员对开发业务逻辑更加重视,使系统的前端、后端同时开发,使系统开发时间大为缩短。其四,具有可维护性。视图层、业务逻辑层进行分离,使得它们之间联系只能通过接口,任何部分内部都不会对其他部分产生影响,从而使Web应用具有可维护性。其五,为软件工程化管理提供了便利。不同层可各司其职,一个层面的应用不同但也有某些相同特征,为软件工程化管理提供了便利。
1.2 MVC设计模式的PHP实现
PHP对象在服务器端不能跨页面存在,所有PHP实际上是没有办法实现传统的MVC架构的,其问题主要在模型上得到体现,如在Java中,数据模型是独立的,不同于业务逻辑、表现逻辑等,它可以在服务器端跨页面存在,JavaBean 就是在这个方面发挥作用[6]。PHP进程在内存中不能长期存在,只能在PHP页面刚刚执行时创建,页面执行结束,则该进程已经结束,基于这种情况,模型不能进行直接实现。
因PHP语言跨页面无法存在,PHP开发框架中使用被动MVC更为适合。在被动MVC模式上,模型身处MVC结构下却不知。也就是说模型是一个普通的對象,和MVC中的其他部分是没有关联的。这样的话,模型就不用再跨页面存在,改变了使用MVC导致的效率低下现象。
被动MVC模式和传统意义上的主动MVC模式不同,模型是一个简单的独立的对象,因而自身的改变不能传达给视图;视图也无法对模型的更新作出订阅及监视等。视图只能够对控制器传送的数据进行使用或者在得到控制器通知之后再去模型进行最新数据的提取。所以被动MVC模式下,控制器还要把模型更新之后的数据传送给视图,因而在设计上相较于主动MVC更加困难。
2 基于MVC设计模式的开发框架建设与改进
2.1 框架入口设计
传统的Web应用程序中,一般是以页面或者文件为基础的,接入模式一般采取多点接入。这种接入模式可以让用户对系统的文件进行直接访问,并且这些文件可以对用户的请求进行处理并把这些处理的结果反应给用户[7]。一个系统请求入口就有很多。这种接入方式给用户显示的接口非常多,容易带来安全隐患,对全局的处理、优化等起了不利影响。
在MVC设计模式上实现的THINKPHP框架,可以实现传统的多点接入模式,同样也可以进行配置,设置成为单点接入模式。
单点接入模式把Web应用应用程序的全部请求都集中到一个脚本文件即所有的HTTP请求都由入口文件统一进行接受。用户和系统进行交互的入口只有这一个。这种接入模式具有许多优点,其一,方便全局处理,如对数据进行安全监测等。其二,可以使程序结构更加清晰,方便进行管理。入口进行集中控制,程序人员只需要负责开发自己的模块就可以,们不需要对程序运行进行协调。其三,保证安全,采用单点入口模式,只开放需要开放的模块,模块的访问地址都是同一个php文件,用户难以辨别,可以保证系统的安全性。另外,单点接入也使系统的一些耦合缺陷不对用户进行开放。相对于多点接入模式来讲,多点模式采用不同的php文件访问web,URL相对简单整洁,但是不方便同一控制,即便可以使用公用配置文件,倘若项目太大,公用配置也不是好的解决方案。
2.2 控制器设计
在MVC设计模式中,控制器主要作用是负责接受用户输入的数据并调用模型和视图功能去完成用户提出的需求。当用户通过web页面中的超链接和发送HTML表单时,控制器本身不做任何处理,也不会输出任何东西。它只接受请求并决定调用哪个模型构件去处理请求,然后决定用哪个视图来显示模型处理返回的结果[8]。
THINKPHP的控制器层由核心控制器和业务控制器组成,核心控制器由系统内部的App类完成,负责应用(包括模块和操作)的调度控制,包括HTTP请求拦截和转发、加载配置等;业务控制器则由用户定义的Action类或者其他控制器类完成。关键代码如下:
…
if(defined('GROUP_NAME')){
if(is_file(CONF_PATH.GROUP_NAME.'/config.php'))
C(include CONF_PATH.GROUP_NAME.'/config.php');// 加载分组配置文件
if(is_file(COMMON_PATH.GROUP_NAME.'/function.php'))
include COMMON_PATH.GROUP_NAME.'/function.php';// 加载分组函数文件
}
…
业务控制器把客户请求和业务逻辑分开,业务控制器是由用户自定义的Action.php文件来实现的,业务控制器全部由Action类派生而来,继承了所有Action类的方法,把数据传送给视图的抽象方法是$this->display。关键代码如下:
…
class Abstract extends Action {
public function index(){
$this->display();
}
}
…
2.3 数据操作
PHP支持的数据库众多,典型的数据库就是 MySql,对于接口支持不具有统一性[9]。
THINKPHP框架对数据库增删改操作进行了封装,简化了数据库操作,使得开发人员不需要学习SQL语句的相关语法,只需使用GetLastSql()指令将需要操作的SQL语句输出到浏览器调整即可。开发人员可以有更多的精力用在系统业务逻辑上,不再考虑SQL的语法。进行简单封装还降低的程序的书写错误,降低了调试出错概率。
2.4 视图技术
在THINKPHP中,利用视图模板技术把数据层、HTML表示层代码进行分离。Web服务器接收URL请求之后,首先需要确认的是不是第一次对URL进行请求,第一次请求的URL,首先对模板进行调用,判断模版主题,然后再由控制器代码等进行编译,最后用户视图生成数据并输出;不是第一次则在已具有的用户视图上进行直接定位,也要判断模版主题,这种请求节省解析以及读取的时间。框架会使系统伪静态化,考虑使用rewrite筛选器完成。加快了程序的运行速度,提高了效率。关键代码如下:
function isMobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){
return true;
}
return false;
}
$info=isMobile();
if($info){ $theme = 'phone'; //手機模板
}else{$theme = 'default'; //默认模板
}
3 结语
社会不断进步,互联网在全球范围内普及,网络应用开发技术发展迅猛,Web应用在人们的生活、工作中产生了较大的影响,许多的信息、数据库系统等逐渐转移到互联网。人们日常生活和Web应用紧密相关。但目前Web应用程序的开发已经不能适应Web应用增强的需求,为了提高Web应用程序的开发效率,并促使其可靠性、可扩展性、可维护性的提高,Web应用程序开发员引入了框架,提高了应用程序开发的质量和效率。本文结合信融天下互联网金融P2P网贷系统和湛江电大学生干部数字化档案系统的实现,基于MVC设计模式对PHP快速开发框架进行分析研究,提出了MVC设计模式的PHP实现即THINKPHP框架,THINKPHP框架把用户界面、业务逻辑进行强制分离,使系统开发设计框架更加清晰并为其提供了改进方法。
本文系2015年度湛江市科学技术局重大科技专项“信融天下互联网金融P2P网贷系统研发及平台运营”(项目编号:15A102)、2015年度湛江市广播电视大学系统科研项目“基于市级电大学生干部数字化档案系统的研究”(立项编号:X201505)的阶段性成果。