首先,Hush Framework是一个标准的MVC框架,MVC的概念大家应该都耳熟能详了,由于关系到本书重要的服务端底层框架的学习,我们还是不得不老调重弹。MVC是模型(Model)、视图(View)和控制器(Controller)的缩写,是目前业内最主流且应用最广泛的软件设计模式之一,MVC具备以下主要优点。
1. 低耦合性
MVC最大的好处之一就是大大降低了程序的耦合性,特别是把视图层和业务逻辑分开之后,让整个应用灵活了很多;当业务逻辑有变化时,我们只需修改模型层和控制器的代码,而无须修改负责应用外观的视图层。
2. 高重用性
MVC的高重用性主要体现在两方面。一方面是视图层的重用性,因为在实际的项目中,我们经常需要修改应用外观来满足需求,由于业务逻辑已经分离出来,所以我们不需要更改逻辑就可以调整应用界面,满足了软件高重用性的要求。另一方面,业务逻辑被分为模型层和控制器层之后,既保证了核心数据结构的稳定性,也增强了业务逻辑控制器的灵活性,这样我们就可以很好地重用核心数据结构来实现多种多样的业务逻辑。
3. 可维护性
MVC设计模式把模型、视图和控制器分开,实际上也把设计者、程序员和UI设计人员的职能做了分离。这种分工方式不仅可以让应用的架构看起来更清晰,还便于软件维护时团队之间的共同协作,这对中大型软件应用程序的代码维护工作将起到很重要的作用。
之前讨论的是MVC设计模式中比较通用的概念和知识,然而对于不同的框架来说,具体的实现方式却有各自不同的特色,接下来我们就来学习Hush Framework中的MVC设计思路。
为了让大家理解起来更容易,我们把Hush Framework处理客户端请求的完整过程通过图形的方式展示出来,如图3-16所示。
从图3-16中我们可以很清楚地看到客户端请求的整个处理过程,在一个标准的基于HTTP协议的互联网应用环境中,用户每次操作都会致使浏览器向HTTP服务器发送HTTP请求,当服务器接收到请求之后,就会调用框架程序来处理,此时Hush Framework就会接管接下来的工作。具体的处理流程一般分为以下几个步骤。
步骤1:首先,Hush Framework的请求分发器(Dispatcher)会分析客户端发送过来的HTTP请求所包含的信息,并根据请求的URL地址来指定使用相应的控制器(Controller)来处理该请求。
步骤2:接着,被指定的控制器会选择合适的模型类(Model)用于持久层数据的获取和存储,并负责处理该请求的业务逻辑。此外,我们可以看到Hush Framework的模型层是基于Zend Framework的模型层的。当然,在逻辑处理完成后,控制器还会调用视图层(View)来组合出最终的HTML代码。
步骤3:最后,服务器会把Hush Framework的处理结果通过HTTP协议返回给客户端程序来进行后续的处理。
通过分析我们会发现,实际上Hush Framework的MVC设计和实现的思路还是比较主流的,和大部分网络应用的MVC框架的思路也比较相似,不过其中还是有不少独特的亮点。比如Hush Framework的分发器(Dispatcher)就使用了独有的快速分发逻辑,大大提高了程序的运行效率;另外,不仅支持常见的URL路由分发模式,还支持通过“路由映射文件”这种更直观的方式来进行更精细的配置,映射文件代码如配置清单3-3所示。
配置清单3-3 etc/app.mapping.ini
; URL mappings
;
; Used by Hush_App_Dispatcher class
; e.g /url/path = PageClassName::ActionName
;
/ = DebugServer::indexAction
/debug/* = DebugServer::*
另外,Hush Framework的模型层使用了Zend Framework作为底层框架,沿用了其完善的DB模型层封装和方法的设计,并使用自己独特的思路封装成Hush Framework的DAO基类,让建立在基类之上的持久层操作更加简便、高效。在接下来的3.6.4节中,我们将通过实例来讲解Hush Framework持久层的用法。