《PHP设计模式介绍》第十七章 MVC 模式
2008-06-26 02:17:50来源: 阅读 ()
web应用是十分多样化的,为了实现某种应用,那哪种或哪些是最好的呢?或者说,对于web应用有没有一种最好的体系?
问题
你能配置一个单一的web体系去满足每个普通的web应用吗?包括一般性的界面呈现风格,身份验证,表单数据确认等等?
解决方案:
MVC模式把你的软件组织架构分解成3个清晰的任务
model结合了应用数据,应用流程以及业务逻辑
view从model中提取数据并呈现出来
controller调用应用流程,接收输入并传送给model和view
注:MVC的起源
MVC模式是1970年由trygve reenskaug在施乐公司的研究中心提出的。最早的参考例程代码是用smalltalk80编写的。它最初是用来解决应用软件中的用户图形界面的交互问题的。
你要使用了MVC模式,你就会知道它是多么的有用,尤其是对于图形化的用户界面应用。除此之外,MVC对web应用也非常有用,虽然web服务进行通讯连接,与通讯过程有时会中断,但这也带来了一些独特的挑战和机会。
假如你到这一章来寻找一种真正的对于web应用的MVC方法,我希望你不会对于这里的答案太失望。最完美的解决方案是不存在的,但是这里有很多实例以及相关的模式,帮助你有效的去实施MVC。有希望的是,这里的观点能作为你的编码工作的跳板,并且带领你进行更多的研究。
模块视图控制器
不像其他的设计模式,MVC模式不是一个注重于讲述一种可以直接设计编码的类结构的模式。相反,它不仅仅是概念上的指导或范例。
在概念上,MVC模式的定义的是model,view以及controller三者之间的桥梁。controller以及view都依赖于model,因为view和controller都得向model发送数据请求。数据通过controller输入到你的系统当中,并最终通过view显示出结果。对于你一个php开发者,更具体的来说,controller处理每一个外部的http请求,而view将产生http回应。
下边是MVC模式的定义图
在理想的MVC环境中,通讯是直接的,如下面的序列图。
当然,具体到细节上就有些差异了。当在web应用里实施MVC时,在单一的类中不会出现model,view以及controller,MVC把各组对象紧密地连接起来,每组对象实现一种特定的任务。controller可以由几类组成,用来分析http请求,以确定应用程序所要进行的处理动作。model一般是由很多类组成。web应用里的view通常是一种摸版体系,可以由一些对象组成。
在接下来的几节,让我们深入挖掘“MVC三和音”的每个部分,了解哪些设计模式存在于或推动每个部分,以及他们如何帮助你进行编码工作。
Model
model包含你的应用逻辑以及应用数据,它可能是你的应用中最主要的逻辑处理部分。model没有任何关于界面风格的表达,对于处理http请求也没有起什么作用。
Domain Model
域model是对象的一层,它将应用程序处理的问题、数据以及业务逻辑抽象化。域model可以归为两大类:简单域model以及富域model
简单域model在业务对象与数据库表单间产生一对一的响应。你已经见过一些模式--active record,table data gateway,以及datamapper,所有数据库相关的设计模式,他们可以帮助你将数据库相关的逻辑组织成一个域model(为了使本书中的例子合理,简洁易懂,选取的材料都没有超过简单域model的一对一响应的范围---同形映射)
一个富域model包括由一堆紧紧交织在一起的对象构成的复杂的web,这些对象使用了继承机制,本书以及gof当中的很多设计模式都覆盖了这些内容。富域model更容易被测试以及反复重构,外加紧密地和商业需求结合在一起。
采用哪种域model就要看你的应用程序的上下文了。如果你只是传送一个相当简单的表单处理web应用,就没有必要建立富域model了。但是,如果你要编写一个库,那是一个数百万美元市值的公司的内部网的底层结构,那就需要建立一个富域model了,它提供了一个精确的表述业务处理以及迅速的数据计算的平台。
martin fowler致力于开发富域model,简要的覆盖了poeaa中的域模型的类型以及在eric evans的书中的域驱动设计
View
view主要处理所有界面呈现的问题。view从model里提取数据,把它格式化成html页面或者xml页面服务,又或者用于email的文本。
鉴定你是否把你的代码分离成明确定义了的任务的一个好方法就是:尝试代替(至少在概念上)另一个wiew,这个view产生完全不同的输出。举个例子,如果你有一个web应用,为了迅速的使你的web程序在php的命令行模式下运行,你要改动什么呢?
直接通过View中的表单调用Model中的方法去修改数据是不合适的,数据的更新修改方法只能借助Controller来调用。View只能以数据的只读方式调用Model中的方法,不能对数据进行修改。一般情况下有两种View设计模式:Template View和Transform View。
Template View
用于web 应用的view中使用的主要模式就是Template View,这个模式使用一个模版文件(通常是html),它包括了一些特殊标记,当Template View被执行时,这些特殊标记就被model里的对应数据替换并显示出来。
php 本身就是一种特定类型的实例模版,叫做服务器页。一个模版系统是基于使用php作为模版的,它本身是savant(http://www.phpsavant.com/)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash