MVC是一种软件设计模式,所谓模式,就是保证项目的可维护性,可读性。它强制性的使应用程序的输入、处理和输出分开,强制程序员在编写项目的时候,把数据的输入、数据的处理、实体数据分开。使用MVC应用程序被分成三个核部件:模型、视图、控制器。它们各自处理自己的任务。MVC的各个字母分别是M(model模型)、V(view视图)C(controller控制器)。
model 模型, 由类实现, 处理业务逻辑,实体类,工具类
view 视图, 就是显示页面
controller 控制器,action之类的,接受用户请求,并调用某个model处理,然后跳转到某个显示页面(只允许用户访问controller,不允许用户访问model)下面我根据一个实际的项目例子来加深自己对MVC设计思想的理解,下面的这个图是我电脑上的MVC测试目录:
include文件夹下有很多类,比如我们常用的数据库操作的类:pdo.class.php。
下面来看我们的model文件夹下的文件:model.class.php和TestModel.class.php,来看它们相应的代码:
model.class.php:
//file model.class.php
class Model
{
protected $table = NULL; //model所控制的表
protected $db = NULL; //引入的mysql对象
public function __construct()
{
$this->db = Mysql::getIns();
}
}
TestModel.class.php:
//file TestModel.class.php
class Test extends Model
{
protected $table = 'test';
public function reg($data)
{
return $this->db->query('insert', $this->table, $data);
}
//取出所有的数据
public function select()
{
return $this->db->getAll('SELECT * FROM ' . $this->table);
}
}
这是我们的model类,相信大家也能看明白,就是通过这个model类去操作数据库类,而不是直接操作数据库类。model类调用数据库类中的方法后,得到数据后返回相应的结果。
在view目录下有一个HTML文件,来看它的代码:
<!-- file userlist.html-->
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<title>model测试,显示用户列表</title>
</head>
<body>
<table class="" border="1px">
<tr><td>username</td><td>money</td></tr>
<?php foreach($list as $v) { ?>
<tr>
<td><?php echo $v['username'];?></td>
<td><?php echo $v['money']; ?></td>
</tr>
<?php }
?>
</table>
</body>
</html>
那userlist.php充当什么角色呢?来看其的代码:
<?php
//file userlist.php
require('./include/init.php');
$test = new Test();
$list = $test->select();
include(ROOT . 'view/' . 'userlist.html');
?>
最后一行代码包含了userlist.html文件,显示从TestModel.class.php中获取的数据。在浏览器中输入完整的userlist.php的url路径,在浏览器中显示结果如下:
大伙现在对于MVC有点明白了吗?再用下面这个图来加深大家对MVC的理解,以及对上面我的代码流程的理解:
调侃一下,userlist.php的任务是把数据得到,是什么样的数据,只有model知道,至于要将数据怎样展示给大众,交给view去做吧!
userlist.php就像一个中间人一样,响应用户请求,调用model和view。userlist.php是用户直接访问的功能页面,称为控制器。
不知道我说明白了没有,大家再来看一个例子,
下面这是一个login.html的前台显示页面代码:
<!-- file login.html -->
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="loginProcess.php" method="post">
<p>username:<input type="text" name="username" /></p>
<p>password:<input type="password" name="password" /></p>
<p><input type="submit" value="submit"></p>
</form>
</body>
</html>
login.html是视图(view),前台显示的,loginProcess.php就是控制器。用户一点提交,就开始去访问控制器(controller)loginProcess.php了,然后控制器会去找有关的model文件验证这个用户是否正确。
就像一个酒店一样,仓库里面有很多的菜品和调料。客人来了,服务员就过去接客,等客人点好餐后,服务员就去找厨师,厨师将菜做好后端到客人的桌子上。这里仓库就好像数据库,厨师就像是model,从仓库中取材料做各种佳肴。服务员就是controller,从model那里将做好的菜端到桌子(view)上。
如果一个酒店的服务员不仅要接待客人,还要自己去下厨给客人做菜,那估计这个酒店就完了。再说这样全能的服务员也少啊!
大家能体会到MVC设计思想的好处了吧。但它也有一些缺点。
1、工作量增加了,由于开发者将一个应用程序
分成了三个部件,所以使用MVC同时也意味着你将要管理比以前更多的问健康i安。
2、不适用小型项目。
3、调试难度加大。
MVC提倡模型和视图分离,这样也给调试应用程序带来一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦一个构件测试ok,就可以大胆使用了。
最后来一个小结吧!
F、控制器接收用户的请求,并决定应该调用哪个模型来进行处理。
S、然后调用模型来处理用户的请求并返回数据。
T、最后控制器用相应的视图显示模型返回的数据,并通过浏览器呈现给用户。