一、模型(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. js数组中indexOf/filter/forEach/map/reduce详解

    今天在网上看到一篇帖子,如题: 出处:前端开发博客 (http://caibaojian.com/5-array-methods.html) 在ES5中一共有9个Array方法,分别是: Array. ...

  2. 处理session跨域几种的方案

    常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态.两种情况:一种9streets.cn和a.9streets.cn之间,另一种是 ...

  3. Flags-Ural1225简单递推

    Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...

  4. Android 上下文对象

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40481055,本文出自:[张鸿洋的博客] 1.Context概念 其实一直想写一 ...

  5. java使用sax解析xml

    目的:解析xml文件,并存入mysql,并且要解析的字段能一一对应.这里解析的是微博的文件,想要利用里面的article和person_id字段. 思路: 为了能得到person_id和article ...

  6. memcached源码安装(linux和windows)

    如果是在windows环境下编译安装,我这边是基于cygwin或msys2方式 安装cygwin环境,http://www.cnblogs.com/skey_chen/p/5765179.html 安 ...

  7. [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 980  Solved: 450[Submit][ ...

  8. RealSense开发-搭建C#开发环境

    一.前言 RealSense的开发环境主要包括如下几部分: 硬件:RealSense摄像头(此处以SR300为例)+搭载Intel酷睿6代处理器的PC机(其实4代处理器也能跑起来): 软件:Windo ...

  9. RDLC 子报表

    1.RDLC 设计页面,拖入table或者矩形 2.右击表格或者矩形单元格,插入--子报表 3.输入名称和将此报表用作子报表 名称:显示在设计页面上的,仅作观看作用 将此报表用作子报表:填写目录下的需 ...

  10. mac office 激活

    详见:http://blog.csdn.net/tech4j/article/details/47953311