— 文章所属小组: CakePHP
CakePHP应用开发:第一章 CakePHP介绍(2)
  • Moon.Wong
  • 评论(0)

理解MVC模式

MVC模式是软件开发中一种常用的设计模式,在这种设计模式中,代码被拆分成三个部分:模 型(Model),视图(View),和控制器(Controller).每个部分的确切作用取决于它们的实现方式, 因为框架跟框架之间有所不同。随后,我们将会说明CakePHP实现MVC模式的方式。因此,这里并不是对于MVC模式的一般性描述,我们仅仅只了解 Cake自身是怎么实现MVC模式。正如我们之前提到的,CakePHP将代码分成三部分:模型,视图,以及控制器。

模型

在CakePHP中,每个模型对应数据库中的一个表。数据库中的每个表都应该有一个模型与 它对应。因此,在CakePHP中,数据库中的每个表都应该有它自己的模型。跟访问,添加,修改或删除表中记录有关的PHP代码都在模型当中。模型之中也 包含了那些定义了与其他模型关系的代码。除此这些,模型也定义了添加或更新表中记录时需要用到的数据验证规则。模型可以被看成应用的数据层。跟模型相关的 业务逻辑也应该定义在模型之中。打个比方,我们有一个模型,假设它是辆轿车,所有跟该模型相关的操作如买车,卖车等等都应该定义在模型之中。应用的核心业 务逻辑都应该定义在模型之中。

控制器

在 CakePHP中,控制器控制着应用的逻辑或者运行流程。每一个页面请求都对应一个具 体的控制器,它负责接收用户的输入(通过POST方法或者 GET方法提交的数据)。控制器的逻辑决定作出何种响应。控制器的逻辑内容一般都需要调用模型以存取数据,它也包含其他一些功能,如访问控制的确认 (ACL)等等。最后,控制器将响应(即输出)传送给视图(我们稍后讨论视图)。控制器可以被视作应用的逻辑控制层。正如上面所提及的那样,模型应该包含 应用的业务逻辑。控制器只应该负责对于模型的操作,它应该轻巧简单。这一设计思想有时被叫做“模型臃肿化,控制器轻巧化。”

视图

视图是请求处理完毕后返回给用户的一个输出或是响应。它们通常都是由夹杂有PHP代码的标 记语言代码(如HTML)组成。但它也可是其他形式的一个输出,像输出XML,PDF文档等等,这取决于具体情况。视图可以被认为是应用的显示层。

它是如何工作

现在,我们对于组成CakePHP的MVC这三部分有了一个良好的理解,然后我们接下来就 了解一下这三个部件是如何协同工作以处理每个请求的。

上面这个图表显示了这三者是如何协同工作的

  1. 带有用户数据的请求提交给控制器。
  2. 控制器处理请求,然后调用模型来存取数据。
  3. 模型响应控制器的调用,发送数据或者存储数据。
  4. 然后控制将返回的数据传送给视图。
  5. 视图将数据以合适的方式展示出来。

正如我们先前已经看到的那样,使用MVC模式有助于将我们的代码模块化。这使得开发者可以按 照需要快速的对代码做些修改。调试和修改将变成一件轻松的事情。 使用MVC另一个附带好处就是代码可以重用。比如,模型中的代码可以用在任何一个需要存取该模型中数据的控制器中使用。

MVC的另一好处就是它缩短了开发时间。但是MVC并非CakePHP用来缩短开发时间的 唯一工具。CakePHP还使用了其他方式来缩短开发时间,稍后我们再来讨论。


快速开发

如今大多数网页应用都是在框架的基础上搭建起来,这其中的一个重要原因就是为了加快开发进 度。使用像CakePHP这样的开发框架,可以使得网页应用开发的速度比直接使用PHP语言快上许多。除了MVC样式,CakePHP采用了其他许多技巧 和戏法来加速网页开发。


更少配置,更多规则

CakePHP设计的一个主要思想就是尽量减少配置。配置通常是用来确保系统设置正确,让 它按照我们的意图来运转。但是在CakePHP中,这些配置被降到最少。实际是,为了让CakePHP跑起来,我们唯一需要做的是让CakePHP知道我 们所使用数据库的名称,除此之外无需其他另外的特别配置!

CakePHP内在设计更多的是依赖规则,而非配置。规则(conventions)都是 些有关数据库字段命名,模型,控制器,视图文件放置位置以及它们的名称之类的约定。如果用户都遵循CakePHP的规则命名按要求放置文件。 CakePHP自己会准确的寻找和使用这些文件。这也是为什么清楚CakePHP的命名规则很重要。一旦我们熟悉这些命名规则,我们就无需在担心配置之类 的事情了。


代码自动生成

试想一下,如果,在我们开始编写代码之前,我们就有一段特定为我们应用所准备的可以拿来用 的基本代码,那么开发会容易上许多。有了 CakePHP之后,这一切就不仅仅停留在幻想层面,因为CakePHP实现了这点。CakePHP内置的代码 生成器更多的是以Baking脚本形式而被大家熟知。我们所要做只是指定工程中的数据库表,然后开始烘烤代码即可。CakePHP会自动创建我们需要的模 型,控制器,以及视图。使用它所生成出的代码,我们马上就有了一个可以插入,编辑,查看,和删除数据库表中数据、并可以跑起来的应用。


快速访问相应数据

CakePHP整合了多个实用的设计模式,这使得访问修改数据库中的数据变得十分的容易。 它有一个非常简洁的数据提取层,而且它也支持关联数据的映射(association data mapping)。

有了Cake的数据提取层,我们无需书写SQL查询语句,来来检索或者修改数据。通过调用 合适的模型函数,我们就可以很容易的存储数据。所有的数据都会用一个有良好规范格式格式的相关数列(associated arrays)返回回来,这省掉了很多麻烦。

关联数据映射(Association data mapping)是CakePHP用来从多个表中提出数据的一个技术,如果需要,你也可以从其他数据库中的表中获取所有相关数据。举个例子,我们有一个 posts表,它里面有博客文章(post)的数据,另一个comments表,它包含了所有文章的评论。现在,如果你想将某个博客文章的数据与该文章对 应的所有评论数据一起从数据库提取出来,我们所要做的只是仅仅调用一个模型函数,这个函数不光返回该文章的数据,而且也会返回所有相关的评论数 据。 CakePHP可以自动从其他表中提取所有相关数据,然后将它们与其他所需要的数据一道返回。我们无需书写些繁杂的SQL语句来实现这点。


常用的内置功能

除了上面提及的特点外,CakePHP其他许多功能,开发人员无需再浪费时间重新编写代码 来实现网页应用中一些比较常见的功能。下面是一个内置功能的不完全清单:

  • 内置的数据验证:CakePHP有一个适用性及其宽泛的数据验证机制,我们只要指定待验证数据的类型,CakePHP就可以帮你处理剩下的事情。
  • 自定义的页面布局:大多数时候,应用的所有页面都有一个看起来大致相同的页面布局。使用CakePHP的布局功能,我们所要做的就是将布局文件放 到合适的位置,然后所有的页面就会调用它。
  • 访问控制:如果你搭建的应用需要我们依据用户类型对该应用的某些区域做一些访问限制,我们可以同时使用访问控制清单(ACL)很容易的实现这点。
  • AJAX 助手:使用了内置的AJAX 助手(该助手使用的是Prototype JS框架和Scrpaculous Java库)添加AJAX的功能十分容易,你无需写一行JavaScript代码就可以实现AJAX。

除了这些,CakePHP还内置了其他许多功能来帮助网页应用的开发。


CakePHP的版本:1.1版 本和1.2版本的CakePHP

现在我们已经知道了CakePHP所有令人心动的功能,我们下面要碰到的问题是,到底使用 哪个版本的CakePHP。现在我们有两个版本的CakePHP可以使用:最为稳定的1.1版本和激动人心的1.2新版本。尽管1.2版本已经出来一阵子 了,但是它目前还是在beta测试阶段。但是我们需要指出的是,CakePHP社区对这个版本相当的有信心,他们自豪的宣称 1.2版本是社区中最为稳定的beta版软件。有许多成品级别的网页应用就是运行在1.2版本之上的。而且,该版本中的新功能以及强化使得1.2版本变得 非常的棒,使人人欲罢不能。因此,在本书中,我们将使用1.2的版本。希望本书出版的时候,1.2的稳定版可以出炉。所有不要再犹豫了,下载最新 的 CakePHP 1.2版本,然后翻到下一章,了解如何安装。


小结

在这一章节,我们了解了什么是CakePHP,以及它是如何帮助我们快速开发有着良好架构 的网页应用,我们也讨论了什么是PHP框架和设计模式,以及它们的意义何在。我们详细地了解了MVC模式的含义,MVC样式是 CakePHP的一个重要 组成部分,它帮助我们简洁明了地组织代码。接下来我们讨论了CakePHP一些能帮助我们加快开发网页应用的功能。最后该书解释了我们选择 CakePHP1.2版本的理由。

Add starShareShare with note

填写登录信息
用户名
密码