MVC设计模式学习理解

 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、最后控制器用相应的视图显示模型返回的数据,并通过浏览器呈现给用户。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值