【PHP开源代码栏目提醒】:本文主要为网学会员提供“浅析MVC模式在WEB开发中的应用 - 毕业设计”,希望对需要浅析MVC模式在WEB开发中的应用 - 毕业设计网友有所帮助,学习一下!
山东科技大学学士学位
论文 摘 要 随着 Web 的发展和功能的需要,动态网页的开发变得越来越复杂,工程也变得越来越庞大,原有的嵌套和面向过程的开发已经无法应付。
MVC就是一个专门针对解决大型 Web 项目的开发模式。
PHP 作为一种简单易用的开发语言,它的第五版对 Object Oriented 思想加入了完全的支持,使用 MVC 模式,
PHP 就能完成复杂的 Web 应用的开发。
是否采用 MVC,如何使用 MVC,一个最根本的原则是不要为了使用而使用。
本文首先介绍了
PHP 语言的特点和开发流程的发展,然后简明扼要的阐述了 MVC 思想,最后以制作个人的 Blog 为例说明如何利用 MVC 思想进行
PHP 开发,并对其中的一些技术细节和难点做出了说明。
关键词:MVC,
PHP,设计模式,Blog The Discussion on MVC Pattern in Web Application ProgrammingAbstract : With the Web application growing more complex and huge theoriginal developing way cannot meet the requirements. MVC is a solution tolarge Web project.
PHP5 fully supports Object Oriented programming and madeit available to use MVC pattern in
PHP programming. Is it necessary to useMVC or How to use MVC a principle to decide this is not to use it just for use.This article can be divided into three parts the first part will introduce thefeature of
PHP and its development in programming. And then states theessential of MVC pattern. At last I will explain how to use MVC by making aBlog and make an explanation to some technical details.Keywords:MVC,
PHP,Design pattern,BlogKey
words: 1 山东科技大学学士学位
论文 目 录1 引 言.................................................................................................................. 1 .2
PHP 介绍与 Web 开发流程的发展....................................................................2 . 2.1
PHP 语言概述......................................................................................................... 2 2.2 传统的
PHP 嵌入式开发........................................................................................ 2 2.3 简单的解析模板的应用........................................................................................ 3 2.4 Smarty 模板技术................................................................................................... 43 MVC 思想............................................................................................................ 7 . 3.1 简介........................................................................................................................ 7 3.2 MVC 设计思路......................................................................................................... 7 3.3 MVC 在
PHP 中的实现............................................................................................. 9 3.4 三层开发体系结构与 MVC 的比较...................................................................... 12 3.5 常见的 MVC 模式实践.......................................................................................... 13 3.6 MVC 开发流程....................................................................................................... 14 3.7 在实际开发过程中的感想.................................................................................. 154 用
PHP 和 MVC 思想开发一个 Blog 的实践.................................................. 17 . 4.1 功能的确定.......................................................................................................... 17 4.2 数据表的设计...................................................................................................... 17 4.3 程序结构.............................................................................................................. 195 结束语.............................................................................................................. 22 . 1 山东科技大学学士学位
论文 1引 言 随着 Web2.0 的兴起,Web 应用在 Internet 中也愈显得重要。
Flash 技术不断发展,以及 JavaScript 等各种老技术的新应用,逐渐弥补着 Web 应用与桌面应用相比交互上的不足。
但由于 Web 本身和相关一些技术的 原 因 ,例如 Http 的瞬时性和无状态性,与传统的桌面编程有着很大的差别,所以在开发过程中也面临着许多新问题,比如仅仅是 HTML 与
代码的分离就有很多讨论与解决
方案。
同时各种设计模式也在 Web 开发中得到了新的应用。
其中 Object Oriented 思想和 MVC 设计模式无疑是最经典也是最常用的,它们极大地增加了
代码的重要性,缩短了开发周期,特别是在中型和大型项目上,优势更加明显。
PHP 作为一种
开源的脚本语言,它的易用性使其成为快速开发 Web 项目的首选。
与此同时,
PHP5.0 对面向对象的支持更加完善,增强了其在企 使业级别的应用, Object Oriented 思想和 MVC 设计模式更有效地得到发挥。
本文后半部分就以
PHP 语言开发一个单用户 Blog 来简要的阐述一下 MVC思想和开发的具体过程。
1 浅析 MVC 模式在 Web 开发中的应用 2
PHP 介绍与 Web 开发流程的发展2.1
PHP 语言概述
PHP 是 Hypertext Preprocessor 的简称,是一种 HTML 内嵌式编程语言。
它的语法混合了 C、
Java 和 Perl 优点及它的新语法,比 CGI、ASP 或者 Perl更快速地执行动态网页。
总的来说,它有以下几个方面的优点:(1)支持的数据库非常广泛,大到 SYBASE、MySQL、ORACLE,小到 Access都支持。
(2)跨平台性非常好,支持 Windows 系列操作系统,LINUX 操作系统和UNIX 操作系统。
同时支持多种 Web 服务器。
(3)
开源软件,升级更新速度非常快。
(4)
免费软件,无须花钱购买。
同时与 Linux、Apache、MySQL 构成性价比最高的 Web
系统。
(5)
PHP5.0 有成熟的面向对象体系,能够适应基本的面向对象要求,适合开发大型项目。
2.2 传统的
PHP 嵌入式开发 最早的
PHP 语言是纯粹的过程化的,通过界定符与 HTML 区别并与HTML 嵌套,实现动态的数据处理。
一个典型的
代码例子如下:ltHTMLgtltHEADgtltTITLEgtMy Pagelt/TITLEgtlt/HEADgtltBODYgtHello ltPHP echo ”Michael”gt Welcome to my sitelt/BODYgt 2 山东科技大学学士学位
论文lt/HTMLgt 其中,ltPHP 与gt是
PHP 的界定符,它们之间的
代码即为
PHP 代 码 ,可以动态的返回需要的数据。
同时也可以与数据库连接实现数据库的操作。
在 Internet 早期一个 HTML 文件的体积并不是很大,业务逻辑也相对简单,这种情况下,echo 一行行的 HTML
代码还相当容易。
但随着
网络的提速,HTML 文件的体积暴增,业务逻辑也越来越复杂。
这时逻辑
代码与表现
代码的嵌套在实际中就显得相当困难。
比如仅仅是一些下拉选择框初始值的确定,就需要大量
代码来实现。
此时,数据层、逻辑层、表现层的概念还没有一个界定和区别,完全是混合在一起的。
随着对程序
代码与 HTML 分离的迫切要求,“模板”技术应运产生。
2.3 简单的解析模板的应用 “模板”技术实际上是结合了 HTML 和脚本语言特征的一种表达方式,逻辑层和表现层依靠它联系。
它基本上单纯的实现了
PHP 代码与
HTML 代码的分离,使得美工和程序员之间的矛盾得到了极大的缓解。
大约在 98 年
PHP3 的时代,Fast Template 的诞生使其成为此类模板技术的典型代表。
代码例子如下:模板文件:ltHTMLgtltHEADgtltTITLEgt titlelt/TITLEgtlt/HEADgtltBODYgtgreetingslt/BODYgt 3 浅析 MVC 模式在 Web 开发中的应用lt/HTMLgtPHP
代码:lt PHPftnew Fasttemplate//实例化模板类……ft-gtParsearray“title”gt”Hello””greetings”gt”Welcome to my site”//对模板变量赋值……?〉 上述例子模板文件中的titlegreetings看作是一个标记,可以被替换成不同的值。
PHP 代码中,通过 Fast template 对titlegreetings动态赋值,这些标记分别被”Hello”和“Welcome to my site”替换,从而实现了程序
代码与 HTML
代码的分离。
与此类似的一些模板技术原理都是将模板读入内存,然后调用 parse函数,用数据对预置的标记进行替换。
此时应用程序的逻辑层和表现层虽然能够被清晰的界定,但表现层仅仅是一个标记的匹配和替换,大量的页面上的布局和判断仍然需要在
PHP中处理和确定,所以
程序员还需要处理一些显示上的
问题。
可以说这是一种不彻底的分离。
2.4 Smarty 模板技术 Smarty 的出现和其独特的思想可以说是让业界为之一震,它的模板编程和“编译”的概念带来了一场革命。
Smarty 将逻辑判断和循环,赋值,config 配置文件等引入到模板中,可以说 Smarty 就是一个小小的解析器。
这样的好处就是我们可以用一个更为通用的模板来实现表现层,不用将显示上的逻辑判断送到
PHP 的逻辑层 4 山东科技大学学士学位
论文中进行,也不用为了实现
代码的分离而因一个小小的显示上的改变重新建一个模板。
程序员所做的仅仅是提取、组织、处理好需要的数据,然后通过 Smarty Assign 到模板,这些数据怎样显示,显示多少,完全交由显示逻辑处理。
这样,程序
代码和 HTML
代码就可以更彻底的分离,不仅简化了工作复杂度,也更有利于分工协作。
Smarty 的另一个特性就是“编译”。
接到 request 后,先判断是否是第一次请求该 URL,如果是,将该 URL 所需模板文件“编译”成脚本,然后redirect;如果不是,则表示该模板已经编译过,可以马上 redirect。
这样除了第一次编译成本比较高之外,其他的访问省去了大量的 parse时间。
Smarty 还具有 cache 技术,对页面生成静态缓存,可以适应更为严格的运行要求1。
Smarty 模板引擎
工作原理图如下(图 1)所示: 图 1:Smarty 工作原理图 5 浅析 MVC 模式在 Web 开发中的应用 另外,国外对 Smarty 这样一个 Engine 级别的系统也存在着很多讨论,有的认为作为一个模板,它提供的功能过于繁杂,
PHP 本身就是一种“模板”语言,在这样的解释性语言上再用另外一套标记嵌套一层解释性语言,简直是多余;另一种看法是
PHP 作为一种优秀的脚本语言,Smarty 是一种更好的彻底分离逻辑层和表现层的思想,虽然它的“编译”同样可以归结为
PHP 语言的应用,却可以提供更方便的使用方法,何乐而不为10。
作者更倾向于后一种观点,清晰的逻辑思路比起系统的一点开销,显然思路更为重要! 6 山东科技大学学士学位
论文 3 MVC 思想3.1 简介 MVC 是“Model-View-Controller”的缩写,即“模型-视图-控制器”。
Event(事件)导致 Controller 改变 Model 或 View,或者同时改变两者。
只要Controller 改变了 Model 的数据或者属性,所有依赖的 View 都会自动更新。
类似的,只要 Controller 改变了 View,View 都会从潜在的 Model 中获取数据来刷新自己。
MVC 模式最早是 Smalltalk 语言研究团提出的,应用于交互应用程序中。
MVC 模式是一种架构模式,其实需要其他模式协作完成2。
MVC 模式是一个复杂的机构模式,其实现也显得非常复杂。
但是,目前已经总结出了很多可靠的模式,多种设计模式结合在一起,使 MVC 模式的实现变得相当简单易行。
View 可以看作一棵树,显然可以用 Composite设计模式来实现。
Views 和 Models 之间的关系可以用 Observer 模式体 现 。
Controller 控制 View 的显示,可以用 Strategy 实际模式实现。
Model 通常是一个调停者,可采用 Mediator 设计模式来实现3。
3.2 MVC
设计思路 MVC 英文即 Model-View –Controller,即把一个应用的输入、处理、输出流程按照 Model,View ,Controller 的方式进行分离,这样一个应用层被分为三个层—模型层,视图层、控制层。
视图(View)代表用户交互界面,对于 Web 来说,可以概括为 HTML界面,但也有可能为 XHTML、XML、Applet 和 Flash 等。
随着应用的复杂性和规模性的提高,界面的处理也变得具有挑战性,一个应用可能有很多不同的视图,MVC 设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。
业务流程的处理交予模型(Model)处理。
比如一个订单的视图只接受来自模型的数据 7 浅析 MVC 模式在 Web 开发中的应用并显示给用户,以及将用户界面的输入数据和请求传递给 Controller 和Model。
模型(Model)就是业务流程和状态的处理以及业务规则的制定。
业务流程的处理过程对其他层来说暗箱操作,模型接受视图请求的数据,并返回最终的处理结果。
业务模型的设计可以说是 MVC 最主要的核心。
目前流行的 EJB 模型就是一个典型的应用例子,它从应用技术实现的角度对模型作了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。
它仅仅告诉你按照模型设计就可以利用某些技术组件,从而减轻了技术上的困难。
对一个开者来说,就可以专注于业务模型的设计。
MVC设计模型告诉我们,把应用的模型按照一定的规划抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。
抽象与具体不能隔得太远,也不能太近。
MVC 并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。
可以用 Object Oriented编程来作比喻,MVC 定义了一个顶级类,告诉它的子类只能做这些,但没法限制你能做这些,这点对实际应用很重要。
业务模型还有一个很重要的模型那就是数据模型。
数据模型主要是指实体对象的数据保存。
比如将一张订单保存到数据库中,从数据库获取订单。
我们可以将这个模型单独列出,所有有关的数据库的操作只限在该模型中。
控制(Controller)可以理解为从用户接受请求,将模型与视图匹配在一起,共同完成用户的请求,划分控制层的作用很明显,它清楚地告诉开发者,它仅是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。
控制层不作任何的数据处理。
例如,用户点击一个链接,控制层接受请求后,并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,把符合要求的视图返回给用户。
因此,一个模 8 山东科技大学学士学位
论文型可能对应多个视图,一个视图可能对应多个模型。
总之,模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。
如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都反映到这些变化。
因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。
这实际上是一种模型的变化—传播机制。
模型、视图、控制器三者之间的关系和各自的主要功能,如下图(图 2)所示: 图 2:模型、视图、控制器关系图3.3 MVC 在
PHP 中的实现
Asp.net 与 Java 中都提供了一个很好的实现这种经典设计模式的类似环境。
目前,
PHP 中有许多 MVC 模式的框架,比如著名的 phrame、phpmvc、mojavi。
它们所提供的是一种半成品,只要按思路走下流程就是一个 MVC实现。
现实中有很多东西需要定制,并且对于小型和某些中型项目来说,运用这样一个 MVC 框架,所带来的益处比开销要小得多。
但是 MVC 的思想应用是比较通用的。
(1)视图 视图是模型的表示,它提供用户交互界面。
使用多个包含单显示页面 9 浅析 MVC 模式在 Web 开发中的应用的用户部件,复杂的 Web 页面可以展示来自多个数据源的内容,并且网页设计人员、美工都能独自参与这些 Web 页面的开发和维护。
PHP 中有两种实现 View 的方法,一个是 Template View,另一个就是Transform View。
a. Template View: 用于 Web 应用的 View 中使用的主要模式就是 Template View,这个模式使用一个模版文件(通常是 html),它包括了一些特殊标记,当 TemplateView 被执行时,这些特殊标记就被 model 里的对应数据替换并显示出来。
PHP 本身就是一种特定类型的实例模版,叫做服务器页。
有一些复杂 而模版引擎甚至是quotPlain Old
PHP Pagesquotpopp的模板不容易变换和替 换 , 且嵌入了控制结构和其他逻辑到页面里。
虽然这样做在移植性上有些欠缺,但是对于分离的思想还是有帮助的4。
在
PHP 中用 Smarty 实现 Template View 是比较好的方法,它所使用的模板文件是一种 HTML 和特定标识符的混合。
这些标识符不仅仅是变量的替换,而且还可以表示一些简单的逻辑应用。
有人曾经怀疑 Smarty 作 MVC视图的适用性,因为 MVC 强调严格的表现层与逻辑层的分离。
而 Smarty在模板中加入逻辑应用仅仅是显示上逻辑判断,与业务逻辑没有任何关系。
这样一来,不仅彻底地实现了程序
代码与 HTML
代码的分离,而且更加符合 MVC“分离”的思想。
需要注意的是,Smarty 所谓的“编译”实际上是把数据和 HTML 组合成最原始的嵌套模式,即仅是 echo 语句与 HTML 的组合,以提高效率。
b. Transform View: Transform View 从 Model 中提取数据,然后把数据转换成需要输出的格式。
它实际上是使用一种语言逐个遍历数据元素,然后集中输出。
TemplateView 与 Transform View 之间的差异就是数据流的方向。
在 Template View 10 山东科技大学学士学位
论文中先有一个输出的框架然后向里面插入数据。
Transform View 中则从数据着手,从它之中建立输出。
实施 Transform View 的主要技术是 xslt5。
(2)控制器 为了能够控制和协调每个用户跨越多个请求的处理,控制机制应该以集中的方式进行管理。
因此为了达到集中管理的目的引入了控制器。
应用程序的控制器集中从客户端接受请求(典型情况下是一个运行浏览器的用户),决定执行什么商业逻辑功能,然后将产生下一步用户界面的责任委派给一个适当的视图组件。
用户控制器提供一个控制和处理请求的集中入口点,它负责接受,截获并处理用户请求;并将请求委托给分发者类,根据当前状态和业务操作的结果决定向客户呈现的视图。
按照传统做法,我们需要在 Controller 里使用请求捕获者类和分发者类 。
请求捕获者类捕获 HTTP 请求转发给控制器。
但在实际应用中,特别是小型应用中,只要实现其思想即可,例如,
PHP 中的系统变量_REQUEST_POST _GET,_FILES 就包含了所有的可能的用户请求,安全方面可以对其进行过滤filter和判断,实现请求捕获者类的功能。
至于分发类者,则主要有两种实现方式:a. Switch…Case: 此种方法使用一系列的常量作为判断依据,实现 Action 与 Model 的对应关系,但缺陷是有可能使得 Controller 过于庞大。
b. Action Map: 这是一个比较
常用的方法,通过对数组键与值的判断,使用一个相同的命令模式调用不同的 Model。
总之,MVC 并没有严格的定义,它的思想有很多实现方法,灵活应用是使用 MVC 的一个原则。
.