不同的MVC框架的通信方式不一样吗?


这是我在阮一峰大大的博客上看到的一张图

原文地址: http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm

clipboard.png

因为公司平时用的是YII框架,所以和我理解的MVC突然就有了区别,下图是我理解的MVC

clipboard.png

图来源于书: web-application-development-with-yii-and-php

请问MVC模式的重点只是MVC三层吗?其中不同通信方式就和自身框架有关了?

阮一峰 yii php mvc

九尾小狐狸 9 years, 3 months ago

前端控制器(路由)并不是MVC必需的设计模式.
MVC的核心思想是分离界面(View),逻辑(Controller),数据(Model).
比如浏览器访问页面控制器,控制器处理输入,调用模型获取数据,载入视图输出数据.


 /post.php?id=1024 //页面控制器(输入ID,输出文章)
<?php
if(!defined('APP_ROOT')) define('APP_ROOT', './'); //定义入口
require APP_ROOT.'include/common.php'; //加载模型(比如functions.php)
$data = get_post(intval($_GET['id'])); //处理输入,调用模型获取数据
$view = render('post.php', $data);     //载入视图输出数据
echo $view;
//在控制器中获取视图需要的所有数据,并封装到$data数组中,传入模板.
//如果你想在视图里直接调用模型数据,可以把render函数改为require.
//这样视图跟控制器都在全局作用域,灵活性更强,但也要注意尽量不要在视图里写具体逻辑.
//视图应该专注于调用并输出数据.

/include/functions.php里的render()函数:


 function render($template, array $data = array()) {
    global $app;
    ob_start();
    require APP_ROOT.'themes/'.$app['theme'].'/'.$template;
    $view = ob_get_contents();
    ob_end_clean();
    return $view;
}

NoelLoo answered 9 years, 3 months ago

阮一峰的也不对,或者他有他的理解。 mvc并不是单向的。 m v c 之间的线估计会很多。 and mvc 就是mvc 。其他的db request router就不要扯进来了。
建议一开始不要扯什么mvc概念,找个框架用着用着,你自然就明白了。

保护野生动物 answered 9 years, 3 months ago

mvc只是一种思想 不同的语言和框架都有各自的实现和改进 就像阮老师写的 他们只是在m v c三个层的侧重点不同

euryale answered 9 years, 3 months ago

Your Answer