mvc架构概念(面试专用)

mvc架构是二十世纪八十年代为编程语言Smalltalk(世界上第一个IDE)发明的一种软件设计模式(这句话装逼专用)

一种可以简化应用程序开发和维护的设计模式,把业务逻辑model和数据显示view分离开来。把传统的input,processing,output运用到图形化用户交互模型中。


Model负责应用程序的业务逻辑,表示企业数据和业务规则,一个模型可以为多个视图提供数据。定义模型时,可以采用简单的建模技术。


View负责web设计和模板设计,主要从用户收集数据,实现方式:html,flash,web services等等。


Controller将view和model合并在一起,从view搜集数据,并决定程序的执行逻辑,然后调用model的模型层解释这些数据并返回数据,最后应用在视图层。本身不输出任何东西和做任何处理,只是接受请求并决定调用哪个模型构件去处理请求最后决定返回哪个视图。

这个C的存在是保证M和V同步,一旦M改变,V也应该同步更新。


例子,我们现在用的桌面就是最好的例子,用户点击我的电脑,然后controller收集这个点击的数据然后确定点击我的电脑这个行为的执行逻辑,调用windows的模型层解释这个点击的行为并返回数据,最后应用在桌面的视图上。

也就是说,人—>controller—>model + 数据库—>view—>人

解释:用户输入,将输入的指令和数据传给业务模型,进行业务的逻辑判断从数据库存取,根据业务逻辑选择不同的视图,将结果返回给用户。

优点是:

耦合性低:那部分出问题就只用改该部分。

重用性高:允许多个视图访问同一个客户端的代码。

生命周期成本低,可维护性高,部署快


缺点:

不适合中小型程序,实现复杂。


自己打造简单的phpMVC框架:

建立3个文件夹,分别是model,view,controller,还有一个index.php作为唯一入口。

在controller文件夹建立一个controller.php文件

<?php
class Controller{
    function index(){
        echo('hello world');
    }
?>
这个名为controller的对象(也就是类,这样说貌似比较专业。。)只包含一个index的方法(也就是函数。。。),这个方法只输出helloworld。下面的代码才是重点,把我们的唯一入口导入controller然后开始执行controller对象的index方法。

index.php的代码:

<?php
require('controller/controller.php');
$cont = new controller();
$cont -> index();
?>
这是简单的php代码,就是调用controller对象里的index方法,输出helloworld的意思。

当然,这还是有点问题的,因为controller部分应该是由uri来决定,所以这个index.php还是要修改一下,这样才能让他决定用哪个uri来运行controller。

index.php新代码如下:

<?php
$c_str = %_GET['c'];                    //获取要运行的controller
$c_name = $c_str.'controller';          //按照约定url中获取的controller名字而不包括controller,此处补齐
$c_path = 'controller/'.$c_name.'.php'; //按照约定controller文件要建立在controller文件夹下,类名要与文件名相同,且文件名要全部小写
$method = $_GET['a'];                   //获取要运行的action
require($c_path);                       //加载要运行的controller文件
$controller = new $c_name;              //实例化controller文件
$controller -> $method();               //运行实例下的action
?>
这里要注意的只有两点,第一,对象名要与文件名相同,这样才能用$c_name同时调用两个的path和类。

第二,对象名称最好改成XXXcontroller这样,然后让$c_str = $_GET['c'] = XXX;然后把$c_name = $c_str.'controller';

当然method就是方法了,会自动给$_GET['a']。


这时在浏览器中输入http://localhost/index.php?c=’XXX‘&a=index就会得到我们的helloworld了。


然后我们讲视图:http://www.jb51.net/article/29861.htm

上面的controller其实并不对,因为controller的作用其实是model和view,用户的中介,所以其实并不会直接输出内容,所以,刚才的那个echo其实应该在view里面实现。所以我们把刚才的那个helloworld移到view并改名为index.php,然后把controller的内容改成:

<?php
class controller{
    funtion index(){
        require('view/index.php');
    }
}
?>
这样才是controller应该做的事情。再把刚才那段url在浏览器上输入一次,应该还是输出这个结果。

为了更详细地讲述mvc的结构,这个话题将延伸到fatfree,f3框架(类别选择f3就可以看到该文章),下一节将举f3的例子来说明。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值