一、模型(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. 一个ubuntu phper的自我修养(workbench)

    workbench从此和navicat的激活码说再见 workbench是一个免费易用功能强大的mysql图形化管理软件,navicat上用到的功能,workbench上都能找到. 一.workben ...

  2. Bootstrap学习(2)--表单

    Bootstrap里的role属性,增强标签的语义化,提高识别力,  如:<form role="form"> input.select.textarea等元素,在Bo ...

  3. winform 移动窗体,和窗体阴影(引用)

    无边框窗体移动://窗体移动API [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [D ...

  4. 公钥私钥和RSA算法

    1, RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 2, RSA算法原理(二) http: ...

  5. ORACLE常用SQL优化hint语句

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  6. java:IO流学习小结

    可以看以下内容学习一下: http://blog.csdn.net/zzp_403184692/article/details/8057693

  7. iOS 10 UserNotifications 使用说明

    本教程以贴代码为主.尽可能直观,少量说明. 注意:XCode8的需要手动开启主target Capabilities中的Push Notification. 关于创建多个target后真机测试的证书问 ...

  8. gbd基本使用一

    http://biancheng.dnbcw.info/linux/391846.html

  9. 【树莓派】 Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/c/chkconfig/chkconfig_11.4.54.60.1debian1_all.deb Could not resolve 'mirrordirector.raspbian.org'

    在安装chkconfig的过程中,遇到如下问题: haochuang@raspberrypi:~/webapp $ sudo apt-get install chkconfigReading pack ...

  10. js 睡觉

    js睡觉 function sleep(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMilli ...