11.1 MVC概述
MVC是一种将前台界面和后台逻辑分开的设计模式,也就是所谓的模板技术,它将应用程序的输入、处理和输出分开。使用MVC设计模式的应用程序一般被分成三个核心部件:即模型(Model)、视图(View)、控制器(Controller),每一核心部件处理各自的任务。
11.1.1 MVC开发模式简介
模型(Model)表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
1.MVC的主要概念
视图(View)是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中, HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和XHTML等一些标识语言和Web Service。
控制器(Controller)接受用户的输入并调用模型和视图去完成用户的需求。当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理,它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。
MVC的处理过程首先是由控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层展现给用户。
2.MVC优缺点
MVC的优点有很多,如低耦合性、高重用性、可适用性和开发成本降低、部署快速、易于维护等。
视图层和业务层的分离,允许更改视图层代码而不用重新编译模型和控制器代码,使模型与控制器和视图相分离,改变应用程序的数据层和业务规则将变得非常容易。
随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何Web(HTTP)浏览器或者无线浏览器(WAP),比如,电子商务软件中用户可以通过计算机也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无须做任何改变。
MVC开发模式并不适用于所有的网站开发,比如MVC不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
11.1.2 Smarty技术介绍
一个交互式的网站最主要的两部分就是界面美工和应用程序。然而无论是微软的ASP或是开放源码的PHP,都是属于内嵌Server Script的网页伺服端语言,在模板引擎出现之前,前台界面显示代码与后台应用程序代码是写在一起的,所以开发大多数的项目一般都是根据需求由美工设计出网站的外观模型,然后由程序开发人员实现后台程序部分,然后项目再返回到HTML页面由设计者继续完善,这样可能在后台程序员和页面设计者之间来来回回好几次。而后台程序员不喜欢干预任何有关HTML标签的工作,同时也不需要美工们和后台程序代码混在一起。美工设计者只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的PHP代码。因此,这时候有一个很好的解决方案支持就显得很重要了。
1.什么是模板引擎
模板引擎让程序开发者专注于程序的控制或是功能的完成,而视觉设计师则可专注于网页排版,让网页看起来更具有专业感。它很适合公司的网站开发团队使用,使每个人都能发挥其专长。
模板引擎技术的核心比较简单。只要将美工页面(不包含任何的PHP代码)指定为模板文件,并将这个模板文件中动态的内容,如数据库输出、用户交互等部分,定义成使用特殊“定界符”包含的“变量”,然后放在模板文件中相应的位置。当用户浏览时,由PHP脚本程序打开该模板文件,并将模板文件中定义的变量进行替换。这样,模板中的特殊变量被替换为不同的动态内容时,就会输出需要的页面。Smarty模板引擎原理如图11-1所示。
正是因为模板引擎的使用,可以使我们很容易地将后台应用程序处理与前台表现层相分离,美工设计人员可以与应用程序开发人员独立工作。此外,因为大多数模板引擎使用的表现逻辑一般比应用程序所使用编程语言的语法更简单,所以,美工设计人员不需要为完成其工作而在程序语言上花费太多的精力。这也带来了许多好处,比如可以使用同样的代码基于不同目标生成数据,像生成打印的数据、生成Web页面或生成电子数据表等。如果不使用模板引擎,则需要针对每种输出目标复制并修改代码,这会带来非常严重的代码冗余,也增加了工作量。
目前,可以在PHP中应用的并且比较成熟的模板有很多,例如Smarty、PHPLIB、IPB等几十种。使用这些通过PHP编写的模板引擎,可以让代码脉络更加清晰,结构更加合理化。也可以让网站的维护和更新变得更容易,让开发和设计工作更容易结合在一起。每个模板引擎都有它自己的特点,所以我们选择使用哪个模板引擎时,对每个模板的特点应当有清楚的认识,充分认识到模板的优势和劣势,将优势充分发挥出来,这样就起到使用模板的效果了。
2.什么是Smarty
Smarty是一个PHP模板引擎。它分开了逻辑程序和界面美工,为PHP程序开发提供了一种易于管理的方法。在Smarty的程序里,模板设计者们编辑模板,组合使用HTML标签和模板标签去格式化这些要素的输出(HTML表格,背景色,字体大小,样式表,等等)。对Smarty的使用者来说,程序里不需要做任何解析的动作, Smarty会自动完成。已经编译过的网页,如果模板没有变动,Smarty就自动跳过编译的动作,直接执行编译过的网页,以节省编译的时间。
注意,这里的编译过的网页仍然是一个动态页面,用户浏览该页时,仍需要PHP解析器去解析该页。只有开启了Smarty缓存,缓存的页面才是静态页面。
对PHP来说,有很多模板引擎可供选择,但Smarty是使用PHP编写出来的目前业界最著名、功能最强大的一种PHP模板引擎。Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进、文字环绕以及正则表达式都可以直接使用,如果觉得不够,Smarty还有很强的扩展能力,可以通过插件的形式进行扩充。另外,Smarty也是一种自由软件,用户可以自由使用、修改,以及重新分发该软件。
当然,Smarty也不是万能的,也有它不合适的地方。Smarty不尝试将逻辑完全和模板分开。如果逻辑程序严格地用于页面表现,那么它在模板里不会出现问题。在小项目中也不适合使用Smarty模板,小项目因为简单而美工与程序员兼于一人,使用Smarty会在一定程度上丧失PHP迅速开发的优点。