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;
    		}
    	}
    }
    
  • 相关阅读:
    jieba库的使用和词云
    类和正则表达
    数据库实践
    自己的第一个网页
    第一个爬虫和测试
    Linux 知识总结
    Python argparse模块基本用法
    Python面向对象编程
    linux Nginx发布基于PHP的WEB
    Linux nginx发布基于python的WEB环境
  • 原文地址:https://www.cnblogs.com/yicunyiye/p/13786878.html
Copyright © 2011-2022 走看看