MVC框架思想原理
1、MVC概述
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写;
MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码;
MVC中,每个模块只做自己范围内的事情,不是自己的事情千万不做;
例如:开饭店,自己不生产食用油,而是找专门生产食用油的厂商;自己也不生产面粉,而是去找专门生产面粉的厂商;而面粉厂商,它也不种小麦,而去找种小麦的农民,……
2、MVC各组件的功能
Model(数据模型)用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
View(视图)是用于处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
3、实例:MVC思想简单演示
项目地址 /全栈教程/03_php高级+mvc/13_Mvc_1/01MVC思想的简单演示
(1)需求分析
在网页上,单击不同的链接,显示不同的日期或时间信息:
点击“显示日期”链接,则显示当前日期;
点击“显示时间”链接,则显示当前时间;
点击“显示日期时间”链接,则显示当前日期时间。
(2)控制器文件controller.php
(3)模型类文件model.class.php
(4)视图文件view.html
MVC实例:学生信息管理
1、实例:使用MVC思想展示学生信息列表
项目文件地址 全栈教程/03_php高级+mvc/13_Mvc_1/MVC1
(1)学生控制器文件:StudentController.php
(2)学生模型类文件:StudentModel.class.php
(3)数据库工具类文件:Db.class.php
(4)学生信息首页视图文件:StudentIndexView.html
2、实例:使用MVC思想删除学生信息
(1)学生信息首页视图文件:StudentIndexView.html
(2)学生控制器文件:StudentController.php
(3)学生模型类文件:StudentModel.class.php
3、MVC总结
一个项目由多个功能模块构成:学生管理、新闻管理、用户管理、产品管理
一个功能只有一个控制器:StudentController、NewsController、UserController、ProductController
一个控制器对应一个模型类:StudentModel、NewsModel、UserModel、ProductModel
一个模型类对应一张数据表操作:student、news、user、product
一个控制器对应多个视图:StudentIndexView.html、StudentAddView.html、StudentEditView.html
MVC第1个版本:整合学生模块和新闻模块
项目文件 全栈教程/03_php高级+mvc/13_Mvc_1/MVC2
1、需求分析
在MVC框架中,同时实现两个模块:学生信息模块、新闻模块;
将学生信息模块的MVC文件复制一份,并修改相应的文件名;
控制器文件:StudentController.php、NewsController.php
模型文类件:StudentModel.class.php、NewsModel.class.php
视图文件:StudentIndexView.php、NewsIndexView.php
提示:文件内部的相应路径,都要一一修改。
2、复制学生模块相关文件
3、修改新闻模块相关文件内容
4、每个视图文件添加简单导航栏
5、添加首页文件index.php,并跳转到默认控制器文件
MVC第2个版本:基础模型类的实现
项目文件 全栈教程/03_php高级+mvc/13_Mvc_1/MVC2
1、需求分析
我们将两个模型类中,公共的属性和方法,提炼出来,放入基础模型类(BaseModel.class.php)中。
其它模型类完成对基础模型类的继承。
重复的代码只写一遍,减少代码量,方便后期维护。
2、创建基础模型类文件:BaseModel.class.php
3、其它模型类继承基础模型类
MVC第3个版本:工厂模型类
项目文件 全栈教程/03_php高级+mvc/13_Mvc_1/MVC3
1、需求分析
设计一个工厂模型类,用来生产不同模型类对象。
具体目标:设计一个类,该类可以”专门生产”模型类的对象。
2、创建工厂模型类:FactoryModel.class.php
3、修改控制器文件代码
MVC第4个版本:控制器类的实现
项目文件 全栈教程/03_php高级+mvc/13_Mvc_1/MVC4
1、需求分析
在MVC中,除了视图文件以外,几乎都是类文件;
将控制器过程代码,上升为控制器类代码。