此教程适用于留言本完成了一个页面的增删改查之后的学习;(第3阶段)
1个文件完成增删改查,页面逻辑会非常的乱。代码的可读性会降低!这个时候必须把逻辑理顺,并且按MVC的思想重新规划页面。有的同学可能会问,一个页面还MVC? MVC不是要代码分离吗?这个都耦合到一起了,不是和MVC背道而驰吗?
首先回顾下什么是MVC?
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
在MVC的设计原则中,一般提倡: 轻M层,重C层。很多大型框架也是这样干的。 为了简化代码,并降低学习成本,同时保持PHP良好的灵活性,我们设计了一套从数据库设计到页面逻辑的辅助工具类,也就是同学们学习的那2个。但很多人光用工具类会让代码很乱,很难维护和管理。这样就需要第3部分的学习,我们称为“模板化”。模版化规范如下:
1、设计数据表即是设计M层,代码舍去M层。数据表的设计原则:遵循数据库设计原则;
2、2个视图层: v_form(); v_list();
3、2个控制层: c_del() ; c_pro();
利用 $_REQUEST['act'] 来做流程控制;
最后单页面的代码如下:
if($_REQUEST['act']=='') v_list(); //为空显示列表
if($_REQUEST['act']=='form') v_form(); //显示表单
if($_REQUEST['act']=='del') c_del(); //处理删除
if($_REQUEST['act']=='pro') c_pro(); //处理添加和修改
上面的代码 就是一个模版大体框架; 那么重点讲下,c_pro();
到底是修改还是删除,根据什么决定呢? 根据id 表单是否为空决定,修改必然会带上id,为空使用 $db->ayinsert, 不为空使用 $db->ayupdate
代码如下:
if($_REQUEST['id']){
$_REQUST['stime']=time();
$db->ayinsert('table',$_REQUEST);
}else{
$db->ayupdate('table',$_REQUEST,"id=$_REQUEST[id]");
}
同学们请看上面的代码,中间没有使用任何数组,而是直接用了$_REQUEST 为什么? 这就是php灵活的地方,本身php就是函数级语言,$_REQUST只是一个内置的数组而已。不但可以直接用,同时还可以增该,例如,添加的时候要获得当前时间,表单里没这个字段,这个时候只需要在执行插入之前,加上一句代码即可。到了这里,同学就应该会发现,为什么我们舍去了M层? 因为只要遵循表单名和字段名一一对应的设计原则,PHP自动帮我们完成了映射关系。也就是数组本身可以作为M层来传递。
这就是借鉴了MVC模式的快速模版,一般我们完成一个表的增删改查,从设计字段到完成代码,只需要20分钟足够。而且基本不会出错。80%的工作量在 v_list() 和 v_form() 上面。 而我们的开发工具基本都是DW,DW所见即所得,利用dw的辅助功能画表单和表格效率非常高。并且可以直接定位代码。
最后说明下,为什么我们需要分函数写? 因为MVC的真正精髓就在于分解! 分成函数,我们利用文件名作为函数的容器,如果换成大型系统,需要做更复杂的逻辑时,我们可以任意把 函数放到类里,从而实现更进一步的分解和分离。例如:
有一个MSG类专门处理更复杂的逻辑的。那么主文件只需要保留: v_list() 和 v_form() 函数,而 c_pro 和 c_del 可以放到主文件对应的类里,直接复制黏贴进去即可。组后的逻辑是:
if($_REQUEST['act']=='') v_list(); //为空显示列表
if($_REQUEST['act']=='form') v_form(); //显示表单
if($_REQUEST['act']=='del') MSG::c_del(); //处理删除
if($_REQUEST['act']=='pro') MSG::c_pro(); //处理添加和修改
这种写法就充分利用了PHP的灵活性,类的静态函数方法很容易抽象出一个单独的层级。而 MSG 类文件可以统一集中管理。这样就可以充分发挥MVC代码分离的好处了。 而最后的msg.php 文件只剩下了视图层。 所以我们这套框架,进可攻,退可守!小型系统直接函数调用,单文件即可。大型系统MVC分离,C层独立控制,v层独立控制。甚至可以利用动态 include 包含,来在其他的文件里调用视图。举例:
if(xxx){
include('msg.php');
v_list();
}
所以将视图和控制层封装到函数就可以满足日后复杂的业务逻辑。
OK,这章的作业就是:
用下面的逻辑结构,重新优化留言本页面,留言本只需调用4个函数解决! 而函数中的传递,利用 $_REQUEST 数组进行。
if($_REQUEST['act']=='') v_list(); //为空显示列表
if($_REQUEST['act']=='form') v_form(); //显示表单
if($_REQUEST['act']=='del') c_del(); //处理删除
if($_REQUEST['act']=='pro') c_pro(); //处理添加和修改
|