FleaPHP 开发指南 - 2. FleaPHP 中的 MVC 模式

2016-02-19 18:41 5 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享FleaPHP 开发指南 - 2. FleaPHP 中的 MVC 模式,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

理解 FleaPHP 中,MVC 模式是如何实现的,以及其特点,可以帮助你更好的运用 FleaPHP。

--------------------------------------------------------------------------------

什么叫做设计模式?
简单来说,设计模式(Pattern)就是解决某一类问题的特定方法。由于这种特定方法在解决同类问题时具有通用性,所以我们就可以一次又一次的利用已有的经验。具体到程序编写上,就是我们可以用类似的程序结构和代码解决同类型的问题。有关设计模式的详细内容,可以阅读经典著作《设计模式》,这里我就不班门弄斧了。

MVC 实际上是一系列略有不同的模式。FleaPHP 采用的是Passive(被动)MVC 模式。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

在 Passive MVC 模式中,Model(模型)完全不知道自己身处于 MVC 结构之中。换句话说,Model 就是一个普通的对象,与 MVC 模式里面的其他组成部分完全没有关联。具体而言,MVC 模式涉及到下列三类对象:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

M 代表 Model,即模型,用于封装与业务逻辑有关的代码和数据。例如对订单的各种计算。
V 代表 View,即视图,用于呈现内容给用户(也就是将程序运行的结果返回给浏览器显示)。例如商品列表页面、后台登录页面。
C 代表 Controller,即控制器,用于接收用户输入(通过浏览器发起的请求),然后调用模型(Model)对输入数据进行处理并获得处理结果。最后将结果传递到视图(View),从而让用户能够看到自己操作的结果。例如用户点击删除文章按钮后,控制器调用操作文章的模型,删除掉指定文章,最后通过视图显示成功删除文章的提示信息。
经过这样简单的分离,我们就把应用程序操作数据的代码(绝大部分 Web 应用程序都是对数据进行操作)和处理用户输入输出的代码分离开来了。

这种分离有许多好处:

清晰的将应用程序分隔为独立的部分;
业务逻辑代码能够很方便的在多处重复使用;
方便开发人员分工协作;
如果需要,可以方便开发人员对应用程序各个部分的代码进行测试。
如果你上面的文字让你觉得很无聊或者不够严谨,那么说明你已经很熟悉 MVC 模式了。如果你看到上面的文字感到无所适从,那说明你还需要多阅读一些面向对象相关的书籍和文档。

--------------------------------------------------------------------------------

应用程序执行流程
下面的插图描述了基于 FleaPHP 应用程序的执行流程。

index.php 是应用程序的入口文件,负责定义一些应用程序必须的常量,并载入 FleaPHP 框架,然后执行 run() 函数;
过滤器链完成 HTTP 请求数据解析、MagicQuotes 处理等工作;
应用程序控制根据 HTTP 请求,调用领域逻辑、表数据入口、组件等,并将处理结果传送到视图/模板;
视图/模板根据应用程序控制器提供的数据生成输出内容并传送到浏览器。
在 FleaPHP 中,index.php 里面的 run() 在调用过滤器链后,会运行一个调度器。该调度器根据 HTTP 请求参数决定要调用的应用程序控制器。例如 index.php?controller=blog&action=list 这个请求表示要调用名为 blog 的应用程序控制器的 list 动作。然后调度器会调用这个控制器的动作。

在 FleaPHP 应用程序中,控制器实现为一个类,控制器动作就是该类的一个方法。

在控制器(MVC 模式中的 Controller)方法中,通过调用领域逻辑代码(MVC 模式中的 Model)来处理 HTTP 请求提交的数据并获得结果。然后再将结果传递给视图(MVC 模式中的 View)。视图根据控制器方法提供的参数从模板文件构造最终的页面内容,并返回给浏览器。

来源:http://www.tulaoshi.com/n/20160219/1618671.html

延伸阅读
标签: Java JAVA基础
在EJB2.1的规范中需要实现ejbTimeout方法,当然还有ejbPassivate、ejbRemove等方法。在EJB3.0中,只有你想用它们的时候,你才必须创建它们,否则不必实现。 这个例子主要有5个文件,这个例子的Bean是一个无状态会话Bean: NewsTimer.java:业务接口。 NewsTimer.java:业务实现类。将来我们开发的EJB也都是这...
Struts是一个Web Framework。那么什么是Framework? !-- frame contents -- !-- /frame contents -- Framework概念并不是很新了,伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的,而且是经过良好测试的软件组件,越来越为人们所青睐。这意味着人们可以将充裕的时间用来分析、构建业务逻辑的应用上,而非...
标签: Java JAVA基础
在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上。事实上,一个实体Bean可以映射到多张表上。在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表。在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表、性别表这两个表。 从表可以使用@Secon...
标签: 新生儿护理
新生儿喂养讲究多 新生BB刚出生,新手爸妈都不知道要如何喂养宝宝,一天喂几次,纯母乳喂养和混合喂养的宝宝有啥区别,夜里还需要喂奶吗,宝宝不喝奶怎么办。。。这些问题困扰着新手爸妈。不担心,图老师小编在这里为新手爸妈普及新生儿BB喂养的常识,希望每一个新生宝宝都能健康的成长。 人体的六大营养素有蛋白质、脂...
标签: Web开发
Sample.ServerSideAdd(100,99, ServerSideAdd_CallBack); function ServerSideAdd_CallBack(response){ if (response.error != null){ alert(response.error); return; } alert(response.value); } 从上面的代码中可以看出,我们为ServerSideAdd函数增加了一个额外参数ServerSideAdd_CallBack,这个参数就是用来处理服务...

经验教程

396

收藏

69
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部