3match_mvc

MVC

以ecshop的前台为例:

功能一:

首页

购物车数据,商品分类数据,其他的首页需要的数据

功能二:

拍卖活动

购物车数据,商品分类数据,拍卖相关数据

功能三:

团购商品

购物车数据,商品分类数据,团购相关数据

可见,应该数据的处理分离出来,在需要的功能中调用即可!

M:模型  用来操作表的

V : 模版  用来显示页面

C:控制器 调度 操作那个表产生数据 调用哪个模版显示数据

此时,采用三层分离(MVC)的方式来实现比赛列表:

C:功能调度:

M,数据处理

V,结果展示

注意:浏览器需要请求C来获得需要的内容!

以上的划分方式,称之为MVC,项目架构思想!

其中:

M:Model,模型,项目中数据处理(业务逻辑处理)单元。

V:view,视图,项目中结果展示的单元(模板文件)。

C:Controller,控制器,项目中负责某个功能整体流程调度单元。

强调:MVC项目架构思想(项目中代码间的组织关系),不决定语法形式(OOP,面向过程),仅仅决定项目代码分工方式!

特点如下:

浏览器仅仅C控制器交互。

模型M和视图V都被控制器C所调用。

模型M和视图V之间,不存在任何的交互。

辨析:

MVC pk MVC框架?

MVC:架构思想

MVC框架:基于MVC思想架构的一个框架(基础代码的集合)

4match_model

模型层典型实现

典型的MVC框架中,模型层代码组织结构是什么样的!、

模型类

每张表,对应一个操作模型,当前表中的所有操作,都是用该模型完成!

[模型类]每张表的操作模型,由某个模型类实例化而来的对象【语法】。

每个表操作,对应模型对象的一个方法。

模型类的示例代码:

同时修改控制器中,使用模型的方法:

C:

Tip:模型,在项目中,通常指的是模型类的对象,而不是模型类本身。

基础模型类

显而易见,在模型中,可能会出现重用的代码,例如(得到DAO对象过程),而且是每个模型对象的每个方法中都需要!

被其他的具体模型类所继承:

MatchModel

基础模型类中增加,初始化数据库操作对象的功能:

Model.class.php

将实例化好的MYSQLDB类的对象,存储到模型对象的属性上,从而保证,模型类的每个方法中都可以使用该属性。

模型方法中的使用:

MatchModel->getList();

何时调用该初始化DAO的方法?

在实例化模型类对象时,就需要操作数据库,就需要执行初始化DAO的方法。

可见在构造方法中被调用即可:

Model.class.php

此时的模型结构关系:

模型的单例

如果在一个功能(控制器)中,如果使用某个表的多次操作,应该使用该表的一个模型就可以完成全部任务。

如何保证模型的单例?

典型的,可以通过一个单例工厂来实现(为什么不三私一公?是多个(所有的模型类)都需要单例效果)

工厂类:

直接new,不能实现需要的业务逻辑,需要辅助一段代码逻辑代码,才能确定如何去实例化对象,此时需要工厂类。

模型对象的单例效果:

不能在需要模型时直接就实例化,因为不能实现单例效果,需要一段逻辑代码,来判断当前模型类是否已经实例化过,如果实例化过,则直接返回实例化过的对象,否则实例化新的。

代码实现:

增加工厂类:

Factory.class.php

控制器中,为了得到单例对象,则需要通过工厂类的M方法完成:

模型的流程

php_mvc实现步骤三,四的更多相关文章

  1. 微信小程序从零开始开发步骤(四)自定义分享的功能

    上一章节,实现了小程序的底部导航的功能,这一节开始实现一些简单的功能.本章节介绍的是小程序的自定义分享的功能. 可以分享小程序的任何一个页面给好友或群聊.注意是分享给好友或群聊,并没有分享到朋友圈.一 ...

  2. RobHess的SIFT代码解析步骤三

    平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 主要参考:1.代码:RobHess的SIFT源码 2.书:王永明 ...

  3. php_mvc实现步骤九(登录验证码,退出-登录标记)

    shop34-17-登录验证码 验证码的分析 登录:防止暴力破解 论坛:防止灌水水 展示类:被抓取. 需要技术: 图片处理技术. 会话session技术. PHP图片处理技术 – GD 具体操作步骤 ...

  4. [Effective Java 读书笔记] 第二章 创建和销毁对象 第三 四条

    第三条 用私有构造器或者枚举类型强化singleton属性 singleton指只能被实例化一次的类,即将构造器设置为私有,使用公有静态成员来实例化,且只实例化一次对象 第四条 通过私有构造器强化不可 ...

  5. 微信小程序从零开始开发步骤(四)

    上一章节,实现了小程序的底部导航的功能,这一节开始实现一些简单的功能.本章节介绍的是小程序的自定义分享的功能. 可以分享小程序的任何一个页面给好友或群聊.注意是分享给好友或群聊,并没有分享到朋友圈.一 ...

  6. php_mvc实现步骤六

    shop34-1-目录布局 存在项目的根目录 shop34 框架代码与应用程序代码划分 框架代码: 在各个应用程序间可以通用的代码. 应用程序代码: 当前项目的业务逻辑实现的代码. 分别创建两个子目录 ...

  7. 安装ceph (快速) 步骤三: Ceph 客户端

    大多数 Ceph 用户不会直接往 Ceph 存储集群里存储对象,他们通常会使用 Ceph 块设备. Ceph 文件系统.或 Ceph 对象存储这三大功能中的一个或多个. 前提条件 先完成存储集群快速入 ...

  8. php_mvc实现步骤十

    shop34-19-商品添加 功能:添加商品表单 Index.php?p=back&c=Goods&a=add Controller-Action: 新建商品控制器类 Applicat ...

  9. php_mvc实现步骤八

    shop34-10-框架类 框架类(框架初始化类) 将原来入口文件中功能,放在该类中完成,入口文件变得简单,轻量! 将入口文件中的各个功能,由框架类的各个方法,完成: 为了简单化,使用纯静态的类.(看 ...

随机推荐

  1. 异常检测(Anomaly detection): 什么是异常检测及其一些应用

    异常检测的例子: 如飞机引擎的两个特征:产生热量与振动频率,我们有m个样本画在图中如上图的叉叉所示,这时来了一个新的样本(xtest),如果它落在上面,则表示它没有问题,如果它落在下面(如上图所示), ...

  2. 5、Python之包管理工具pip

    pip提供我们各色各样的软件(第三方库),而这些第三方库又可以给我们实现各种各样不同的功能,科学计算.画图.操作文件.聊天-- 我们可以通过Cmd终端.Pycharm.Jupyter三种平台使用pip ...

  3. 常用Maven插件介绍(转载)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  4. 怎样在一条sql语句中将第一列和第二列加和的值作为第三列的值

    今天在写代码的时候,遇到的一个小问题,特意记下来,以免自己以后忘记了. 在一个表单里面,要表单的第一列和第二列的值查询出来,做和,作为第三列的值. select 1 as a,2 as b,(a+b) ...

  5. 微信小程序弹窗

    wxml <view class="content"> <button bindtap="popSuccessTest">成功提示弹窗& ...

  6. 如何把上传图片时候的文件对象转换为图片的url !

    getObjectURL(file) { var url = null; if (window.createObjectURL != undefined) { url = window.createO ...

  7. _purecall函数

    默认纯虚拟函数调用错误处理程序. 当调用纯虚拟成员函数时,编译器生成调用此函数的代码. 原型: extern "C" int __cdecl _purecall(); _Purec ...

  8. Java如何正确的将数值转化为ArrayList?

    Java中使用工具类Arrays.asList()看似可以把一个数组转为List,但实际使用时有两个坑:1.它是泛型方法,传入的参数必须是对象数组,当传入一个原生数据类型数组时,Arrays.asLi ...

  9. 46、Spark SQL工作原理剖析以及性能优化

    一.工作原理剖析 1.图解 二.性能优化 1.设置Shuffle过程中的并行度:spark.sql.shuffle.partitions(SQLContext.setConf()) 2.在Hive数据 ...

  10. vuex如何实现数据持久化,刷新页面存储的值还存在

    1.安装: npm install vuex-persistedstate --save 2.找到store/index.js import Vue from 'vue' import Vuex fr ...