zoukankan      html  css  js  c++  java
  • php-mvc概念

    0x01 mvc的概念与作用

    MVC是一种非常重要的设计模式,是三个字词的缩写,分别为:模型,视图,控制器,mvc模式的目的是实现web系统的职能分工,它强制性使应用程序的输入,处理和输出分开,可以各自处理自己的任务,是一种分层的概念,module层实现系统中的业务逻辑,view层用于实现与用户的交互,controller层是model与view之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图用于显示,同时它也可以解释用户的输入并将他们映射为模型层可执行的操作

    mvc的设计思路是把一个应用的输入,处理,输出流程按照model,view和controller的方式进行分离,这样一个应用被分为三个层(模型,视图,控制)

    0x02 mvc的优点

    1.各施其职,互不干涉

    在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变zhi化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。

    2.有利于开发中的分工

    在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。

    3.有利于组件的重用

    分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。

    4.MVC设计模式可以说实现了分层开发。各个层都有各个层的作用。

    5.降低了层与层之间的依赖,有利于代码的标准化开发

    6.再用新的代码业务逻辑替换时,只需要替换相对应的层,大大降低了我们的工作量,分工明确。

    0x02 mvc的缺点

    1.增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

    2.视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

    3.视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

    4.目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。

    5.麻烦,有些代码重复的过多,不利于在实际开发中使用,所以我们要学习框架,下面的鸟瞰图分析了框架在MVC里都替代了哪些层。

    0x03 mvc

    这里我们就需要分离开来

    Index/Controller/IndexController.php

    <?php
    class IndexController{
    	public function index(){
    		echo 1;
    	}
    }
    
    ?>
    

    Index/Controller/IndexController.php

    <?php
    class IndexController{
    	public function index(){
    		echo 1;
    	}
    
    	public function test(){
    		echo 2;
    	}
    }
    
    ?>
    

    index.php

    <?php
    $c = isset($_GET['c']) ? $_GET['c']."Controller" : 'IndexController';
    $m = isset($_GET['m']) ? $_GET['m'] : "index";
    $root_file = dirname(__FILE__)."/Index/Controller/";
    if(!file_exists($root_file.$c.".php")){
    	echo "错误异常";die;
    }
    include_once $root_file.$c.".php";
    $info = new $c;
    $info->$m();
    
    ?>
    

    这里来写个mvc的登录框架
    index.php

    <?php
    
    
    $c = isset($_GET['c']) ? $_GET['c']."Controller" : 'IndexController';
    $m = isset($_GET['m']) ? $_GET['m'] : 'index';
    
    $root_file = dirname(__FILE__)."/Index/Controller/";
    
    if(!file_exists($root_file.$c.".php")){
    	echo "错误异常";die;
    }
    
    include_once $root_file.$c.".php";
    $info = new $c;
    $info->$m();
    

    /Controller/IndexController.php

    <?php
    
    class IndexController
    {
    	public function index()
    	{
    		if($_POST){
    			include_once dirname(dirname(__FILE__))."/Model/IndexModel.php";
    			$info = new IndexModel();
    			$data = $info->index($_POST['username'],$_POST['password']);
    			if($data){
    				echo 1;
    			} else {
    				echo 2;
    			}
    		} else {
    			include_once dirname(dirname(__FILE__))."/View/Index/index.tpl";
    		}
    	}
    }
    

    /Module/IndexModel.php

    <?php
    /**
    * 
    */
    class IndexModel
    {
    	public function index($name = "",$password = "")
    	{
    		if($name == "admin"){
    			return true;
    		} else {
    			return false;
    		}
    	}
    }
    
  • 相关阅读:
    iOS resign code with App Store profile and post to AppStore
    HTTPS科普扫盲帖 对称加密 非对称加密
    appid 评价
    使用Carthage安装第三方Swift库
    AngularJS:何时应该使用Directive、Controller、Service?
    xcode7 The operation couldn't be completed.
    cocoapods pod install 安装报错 is not used in any concrete target
    xcode7 NSAppTransportSecurity
    learning uboot how to set ddr parameter in qca4531 cpu
    learning uboot enable protect console
  • 原文地址:https://www.cnblogs.com/yicunyiye/p/13786878.html
Copyright © 2011-2022 走看看