一、模型(Model)层
1、ThinkPHP支持多层Model,不同的模型层都继承自系统的Model类。
 
2、模型的多层通过目录结构和命名规范区分。
例如:在某个项目设计中需要区分数据层、逻辑层、服务层等不同的模型层,可以在模块目录下面创建ModelLogicService目录,把对用户表的所有模型操作分成三层:
1)数据层(Model/UserModel):用于定义数据相关的自动验证和自动完成和数据存取接口
2)逻辑层(Logic/UserLogic):用于定义用户相关的业务逻辑
3)服务层(Service/UserService):用于定义用户相关的服务接口等
这三个模型操作类统一都继承Model类。
 
数据层:Home/Model/UserModel.class.php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{ }
 
逻辑层:Home/Logic/UserLogic.class.php
namespace Home\Logic;
use Think\Model;
class UserLogic extends Model{ }
 
服务层:Home/Service/UserService.class.php
namespace Home\Service;
use Think\Model;
class UserService extends Model{ }
 
用内置的D方法调用:
D('User')           //实例化UserModel
D('User','Logic')   //实例化UserLogic
D('User','Service') //实例化UserService
默认的模型层是Model,这是因为在/ThinkPHP/Conf/convention.php文件里,默认的模型层名称是是Model:
'DEFAULT_M_LAYER'       =>  'Model', // 默认的模型层名称
 
如果更改默认的模型层名称为Logic:
'DEFAULT_M_LAYER'       =>  'Logic', // 默认的模型层名称
则实例化的时候需要改成:
D('User')           //实例化UserLogic
D('User','Model')   //实例化UserModel
D('User','Service') //实例化UserService
 
二、视图(View)层
1、视图层由模板和模板引擎组成,在模板中可以直接使用PHP代码。
 
2、视图的多层可以简单的通过目录(也就是模板主题)区分,例如:
View/default/User/add.html
View/blue/User/add.html
 
3、复杂一点的多层视图可以采用不同的视图目录来完成,这样做的好处是每个不同的视图层都可以支持不同的模板主题功能。例如:
view 普通视图层目录
mobile 手机端访问视图层目录
 
4、默认的视图层是View目录,可以在/ThinkPHP/Conf/convention.php文件里更改视图层名称:
'DEFAULT_V_LAYER' => 'Mobile', // 默认的视图层名称更改为Mobile
 
三、控制器(Controller)层
1、ThinkPHP的控制器层由核心控制器业务控制器组成。
  • 核心控制器由系统内部的App类完成,负责应用(包括模块、控制器和操作)的调度控制,包括HTTP请求拦截和转发、加载配置等。
  • 业务控制器则由用户定义的控制器类完成。
2、多层业务控制器的实现原理和模型的分层类似。
例如业务控制器和事件控制器:
Controller/UserController //用于用户的业务逻辑控制和调度
Event/UserEvent           //用于用户的事件响应操作
UserController负责外部交互响应,通过URL请求响应,例如 http://serverName/User/index;
UserEvent负责内部的事件响应,并且只能在内部调用,A('User','Event')
 
访问控制器 Home/Controller/UserController.class.php 定义如下:
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{ }
 
事件控制器 Home/Event/UserEvent.class.php 定义如下:
namespace Home\Event;
use Think\Controller;
class UserEvent extends Controller{ }
 
3、默认的访问控制器层是Controller,我们可以在/ThinkPHP/Conf/convention.php文件里调整设置如下:
'DEFAULT_C_LAYER' => 'Event', // 默认的控制器层名称改为Event

ThinkPHP 3.2.3(四)架构之多层MVC的更多相关文章

  1. thinkphp学习笔记7—多层MVC

    原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...

  2. .Net机试题——编写一个BS架构的多层表结构的信息管理模块

      要求: 编写一个BS架构的多层表结构的信息管理模块,用户体验需要注意.包含错误处理,需要最终能完整的跑起来.页面可以不美化,但是整洁还是必须的.在不能完成详细功能需求的情况下优先保证基本功能. 1 ...

  3. SpringBoot微服务架构下的MVC模型总结

    SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...

  4. 架构模式:MVC与MVVM

    本文探讨如下几个问题: 什么是MVC 什么是MVVM MVC与MVVM对架构属性的影响 MVC实例SpringMVC MVVM实例Vue MVC.MVVM与Layer中的Model,Controlle ...

  5. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  6. Magento架构分析,Magento MVC 设计分析

    Magento架构分析,Magento MVC 设计分析 分类:Magento 标签:Magento MVC.Magento架构 669人浏览 Magento 采用类似 JAVA的架构,其扩展与稳定性 ...

  7. thinkphp 多层mvc

    hinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计. 模型(Model)层 默认的模型层由Model类构成,但 ...

  8. Storm系列(十四)架构分析之Executor-输入和输出处理

    Executor的数据 mk-executor-data函数用于定义Executor中含有的数据. Executor的输入处理 根据executor-id从Worker的:executor-recei ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...

随机推荐

  1. android 获取设备拔插状态广播事件易漏掉的一行属性!

    我们都知道设备拔插的状态获取需要一个权限   <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILES ...

  2. easyui validatebox 验证类型

    required: "必选字段",        remote: "请修正该字段",        email: "请输入正确格式的电子邮件" ...

  3. Unity LightmapParameters的使用

    Unity5的烘培十分不好用,今天看官方demo时发现可以用LightmapParameters对模型的GI配置进行单独覆写,介绍一下 LightmapParameters可以把全局光照的配置做成预设 ...

  4. SSO单点登录Spring-Security & CAS使用手册

    1.1概述 1.1.1单点登录介绍 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可 ...

  5. Jenkins安装与基本配置

    环境:centos 6.5,jenkins依赖jdk,当前版本推荐jdk1.8,1.7也可以用 首先,机器应该可以访问外网,用yum安装即可(这里版本号是2.19.4): wget -O /etc/y ...

  6. python 学习笔记 redis操作

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  7. .net面试题集锦

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...

  8. Thread 和 Runnable 的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口: Thread类是在java.lang包中定义 的.一个类只要继承了Thread类同时覆写了本类中的run ...

  9. kali安装java1.8

    0x01 下载 首先,去官方网站下载JDK1.8对应的版本 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...

  10. 手势(UIGestureRecognizer)

    通过继承 UIGestureRecognizer 类,实现自定义手势(手势识别器类). PS:自定义手势时,需要 #import <UIKit/UIGestureRecognizerSubcla ...