MVC架构模式分析与设计(一)---简单的mvc架构

首先 我要感谢慕课网的老师提供视频资料

http://www.imooc.com/learn/69

下面我来进行笔记

我们制作一个简单的mvc架构

制作第一个控制器 testController.class.php

<?php
/**
*
*/
class testController
{
	function show(){
		// 控制器的作用是调用模型,冰调用视图,将模型产生的数据传递到视图
		// 让相关视图去显示
		echo "hello world";
	}
}

 制作第一个模型 testModel.class.php

<?php
 /**
 *
 */
 class testModel
 {
 	// 模型的作用是获取数据并处理返回数据
 	function get(){
 		return "hello world";
 	}
 }

 制作第一个视图  testView.class.php

<?php
/**
*
*/
class testView
{
	function display($data){
		// 视图的作用是将取得的数据进行组织,美化等,并最终向用户输出
		echo $data;
	}
}

 制作第一个入口文件 test.php

<?php
/*********************
第一步 浏览器   》 调用控制器,对他发出指令
第二步 控制器   》 按指令选取一个合适的模型
第三步 模型     》 按控制器指令选取相应的数据
第四步 控制器   》 按指令选取相对应的视图
第五步 视图     》 把第三步渠道的数据按用户想要的样子显示出来
*****************************/
require_once ('testController.class.php');
require_once ('testView.class.php');
require_once ('testModel.class.php');

$testController=new testController();
$testController->show();
?>

 这个时候我们要对控制器的文件进行改造

?php
/**
*
*/
class testController
{
	function show(){
		// 控制器的作用是调用模型,冰调用视图,将模型产生的数据传递到视图
		// 让相关视图去显示
		$testModel=new testModel();
		$data=$testModel->get();
		$testView=new testView();
		$testView->display($data);
	}
}

   如果没错的话 那么就会得到hello world这句话

 那么一个很简单的mvc架构已经形成了 我们现在要对其进行添加功能使其能够应对需求

架构的目录如下

index.php 入口文件

config.php配置文件

function.php 全局文件

libs 类库

-------Controller  控制器

--------Model      模型

--------View       视图

--------ORG      第三方类库

<?php
// ********************
// 第一步 浏览器   》 调用控制器,对他发出指令
// 第二步 控制器   》 按指令选取一个合适的模型
// 第三步 模型     》 按控制器指令选取相应的数据
// 第四步 控制器   》 按指令选取相对应的视图
// 第五步 视图     》 把第三步渠道的数据按用户想要的样子显示出来
// ****************************
// require_once ('testController.class.php');
// require_once ('testView.class.php');
// require_once ('testModel.class.php');

// $testController=new testController();
// $testController->show();
//

// url形式 index.php?controller=控制器&method=方法名
require_once('function.php');require_once('config.php');
$controllerAllow= array('test','index','show');
$methodAllow = array('test','index' );
$controller=in_array($_GET['controller'],$controllerAllow)?daddslashes($_GET['controller']):'index';
$method=in_array($_GET['method'],$methodAllow)?daddslashes($_GET['method']):'index';
C($controller,$method);

 ?>

  首先我们对之前的入口文件注释掉  我们此时应该引入一个全局的文件和一个配置文件

然后我们通过控制器的传入的控制器名和控制器的方法进行路由重置使其得到相关的结果输出

可以得到基本的代码片段

$controller=$_GET['controller']);

此时我们要考虑一下的因素

  1.没有传入控制器的名称是 怎么办?

  2。传入的控制器名称不合法的时候,怎么办?

3.转入的控制器的名称为私密的时候,不可以外部调用的时候,怎么办?

结合以上三个因素  可以把代码改为

$controllerAllow= array('test','index','show');
$methodAllow = array('test','index' );
$controller=in_array($_GET['controller'],$controllerAllow)?daddslashes($_GET['controller']):'index';
$method=in_array($_GET['method'],$methodAllow)?daddslashes($_GET['method']):'index';

  由于重复的利用了进行路由的跳转  这个时候我们应该定义一个C函数来进行  全局化调用

下面我们贴下了function.php中的函数C的片段

function C($name,$method){
	require_once ('/libs/Controller/'.$name.'Controller.class.php');
	 eval('$obj = new '.$name.'Controller();$obj->'.$method.'();');
}

  访问对应的控制器的方法,eval可以进行对应的字符进行位置上的拼接

其他的函数如下

function M($name){
	require_once ('/libs/Model/'.$name.'Model.class.php');
	eval('$obj=new '.$name.'Model();');
	return $obj;
}

function V($name){
	require_once ('/libs/View/'.$name.'View.class.php');
	eval('$obj=new '.$name.'View();');
	return $obj;
}
function daddslashes($str){
	return (!get_magic_quotes_gpc()?addslashes($str):$str);
}

  

上一篇:转载:一幅图弄清DFT与DTFT,DFS的关系


下一篇:Django单元测试案例代码覆盖率统计 - 自定义test runner