php中mvc模式使用总结(一)
  热度 °
尽管MVC(model view controller pattern)模式在PHP
web开发中很受欢迎,但是网上很难找到一套代码简单又能清楚阐述PHP MVC
模式的案例,本文希望通过理论和代码实践简单阐述PHP MVC
模式。
MVC
模式在应用中分为Model
, View
和 Controller
三模块:
Model
负责处理数据; 主要负责数据有关的业务处理及存储读取工作。
View
负责将Model
层的数据按一定的格式样式展现给用户。
Controller
负责将Model
层和View
层联系起来,Controller
层响应用户的请求,并将请求业务分发给Model
层相应的业务逻辑处理,然后将处理数据再返回给View
层展示。
MVC
三者之间的关系如图所示:
本文设计的MVC
demo目录如下
Controller 层
Controller
层可是MVC
的入口,接收一个用户请求,解析请求发送给Model
层,调用Model
层处理业务,接收Model
层返回的数据结果,并将数据发送给展示层。Controller
层是Model
层和View
层之间的连接纽带;小的框架中Model
层和View
层是包含在Controller
层中。应用程序中一般会以index.php
作为程序的入口,index.php
会将用户的所有请求直接转发到Controller
层,由Controller
层进行相应的处理。
1 | //index.php file |
在本例中Controller
层只有一个函数和一个构造函数。构造函数示例化一个Model
类的实例;当Controller
对接收的req
解析之后,需要决定调用Model
层相应的业务逻辑进行处理,然后将Model
层返回的处理数据分发给view
层展示。需要知道的是Controller
层不是知道data
如何处理的,也不知道页面是如何生成的。
1 | //controller/Controller.php file |
MVC
时序图
Model 和 Entity 类
Model
层表示应用程序中的数据和逻辑,通常称之为业务逻辑; 通常表示为如下:
存储,删除, 更新应用程序的数据。通常包括数据库方面的操作, 也可以按照一定的协议格式封装数据然后再通过调用第三方web服务或APIs进行相应的数据处理。
封装应用程序的业务逻辑;实现应用程序的所有业务逻辑。通常人们会错误的应用程序的一些业务逻辑实现写入到
Controller
层或View
层中, 这是一种错误的或者说不规范的做法。
本例中,Model
层主要由Model
类和Book
类组成。Book
类是一个实体类,应该暴露给View
层。在一个好的MVC
模式设计中,Model
层中只有Entity
类应该暴露接口供View
层调用。这样做的唯一目的就是保持数据,因为Entity
类中的对象可以通过xml
或json
数据块替换。在上述的示例中,Model
层返回了一个具体的book
实例信息,或者一个books
list:
1 | //model/Model.php file |
在真实场景中,Model
层负责将所有的实体和类中的数据持久化到数据库,Model
层中的类封装所有的业务逻辑。
1 | //model/Book.php file |
View层
View
层负责将Model
层返回的数据按照一定样式格式化呈现给用户。Model
层返回的数据可以是简单的对象类型,也可以是xml, json等复杂的数据类型。
View
层对于类似的展示逻辑应提取为模板,便于复用View
层代码的同时有利于维护 。Controller
层通常通过Entity
类中的主Entity
实例对象将Model
层返回的数据转发给View
层中特定的展示元素。
在本例中View
层包含展示单个book
信息和展示所有book
信息两个文件
viewbook.php
1 | <html> |
booklist.php
1 | <html> |
至此本demo分析实现完毕,github示例代码
总结
Model
层和View
层分开使得构建应用程序更加容易Model
层和View
层可以根据项目需要其中一层构成MV
或CV
模式- 可以对
MVC
模式中每个层进行单独的测试和调试
作者署名:朴实的一线攻城狮
本文标题:php中mvc模式使用总结(一)
本文出处:http://researchlab.github.io/2016/07/30/php-mvc-1/
版权声明:本文由Lee Hong创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处, 否则保留追究法律责任的权利。