架构分层

  • 一、分层意义
  • 二、代码架构
  • 三、common层设计
  • 四、实践代码

一、分层意义

意义我觉得最重要的是方便维护,如果代码没有分层,都是写在控制器里,包括了各种参数校验,各种情景判断,各种数据查询返回结果不同,十分混乱,出现问题很难定位,修改需求十分头疼,良好的分层架构可以解决后顾之忧。

二、代码架构


这里借用了某课网老师的图,我又重新画了一遍,我们把代码分为以上5个模块,它们的作用分别为:

模块 作用
控制器 controller 负责调用业务层,返回组装数据给视图层或api接口
业务逻辑层 business 负责调用第三方库或模型层获取数据
基础库 lib 负责封装特定功能的库或引用第三方类库
模型层 model 负责连接数据库返回数据
视图层 view 负责返回数据到前台

三、common层设计

有些模块对于多个应用是可以公用的,所以可以创建一个common目录存放所有应用公共的文件,common目录与其他应用目录同级。如business、lib、model等。

注意:修改文件目录,记得修改文件命名空间和引用该文件的地方。

考虑到后面操作数据可能会用到redis等,所以这里对model再分层。

四、实践代码

Model:

<?phpnamespace app\common\model\mysql;
use think\Model;class Demo extends Model
{public function getDemoDataByCategoryId($cateId, $limit = 10){return $this->where("cate_id", $cateId)->limit($limit)->select()->toArray();}
}

Business:

<?phpnamespace app\common\business;
use app\common\model\mysql\Demo as DemoModel;class Demo
{public function getDemoDataByCategoryId($cateId, $limit = 10){$model = new DemoModel();$results = $model->getDemoDataByCategoryId($cateId, $limit);if(empty($results)){return [];}return $results;}
}

controller:

<?phpnamespace app\demo\controller;use app\BaseController;
use app\common\business\Demo;class Index extends BaseController
{public function test(){$cateId = $this->request->param("cate_id",0,"intval");if(empty($cateId)){return show(config("status.error"), "参数错误");}$demo = new Demo();$results = $demo->getDemoDataByCategoryId($cateId);return show(config("status.success"), "ok", $results);}
}

⭐️重磅推荐:免费商用电商系统

ThinkPHP6项目基操(9.架构分层)相关推荐

  1. ThinkPHP6项目基操目录

    前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...

  2. ThinkPHP6项目基操(15.实战部分 阿里云短信redis)

    阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...

  3. ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)

    项目中的自定义异常处理总结 错误页面&API错误 前言 一.异常分类 1. 控制器找不到 2. 方法找不到 3. 请求资源不存在 4. 系统內部异常.HTTP异常等 二.异常处理 1. 前置处 ...

  4. ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)

    实战部分 部署后台静态页面模板及后台登录页面 前言 一.部署静态资源到项目 1.新建后台静态资源文件夹 二.后台登录页面 1. 目录结构 2. 模板字符串替换配置 前言 网站后台一般是在基础静态页面上 ...

  5. ThinkPHP6项目基操(4.拦截无效请求 控制器或方法不存在)

    拦截无效请求 控制器或方法不存在 一.默认无效请求 二.显示具体错误信息 方法1.配置`config/app.php` 方法2. 配置`.env`环境变量 三.处理错误 1. 方法不存在 2. 控制器 ...

  6. ThinkPHP6项目基操(2.Nginx配置虚拟域名及简化访问路径)

    Nginx配置虚拟域名及隐藏public和index.php路径 一.phpStudy 创建网站 二.隐藏index.php 方法一:vhosts.conf 方法二:phpStudy面板配置伪静态 方 ...

  7. ThinkPHP6项目基操(1.环境搭建及ThinkPHP6的安装)

    环境搭建及ThinkPHP6.0的安装 一.环境搭建 二.安装ThinkPHP6.0 一.环境搭建 服务器:Nginx1.16.1 端口:80 数据库:MySQL5.7.26 端口:3307 PHP版 ...

  8. php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)

    一.定义中间件 namespace app\middleware; class Check { public function handle($request, \Closure $next) { i ...

  9. ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)

    数据库操作返回值总结 0. 前言 1. Db类操作数据库 1.1 新增 1.2 更新 1.3 删除 1.3.1 单条删除 1.3.2 批量删除 1.4 查询 1.4.1 单笔记录 1.4.2 多笔记录 ...

最新文章

  1. AR设备单目视觉惯导SLAM算法综述与评价
  2. 原生ajax的post操作
  3. Mybatis-Plus 支持分库分表了?-官方神器发布!
  4. 为什么人工智能被过度炒作?
  5. iphone11看信号强度_iPhone11信号怎么样_iPhone11信号差原因|解决办法-太平洋IT百科...
  6. torch.topk
  7. 【收藏】linux下用命令方式创建及管理kvm虚拟机
  8. [leetcode] 108.有序数组转换为二叉搜索树
  9. util.java_TelnetUtil.java
  10. win10 后台运行jar包_小编演示win10系统双击运行jar文件的教程
  11. 程序猿必须要知道的一个内容:客户端+服务端一(源码解析、建议收藏)
  12. 讲真,灾备的内涵其实很丰富
  13. JAVA50道基础编程题
  14. 135批量抓鸡 依赖 古老得RTCS
  15. 关于华硕电脑FX80GE风扇模式无法调节
  16. matlab函数零点求法,Matlab之函数零点 | 学步园
  17. 半导体器件制造封装材料和生产工艺流程(图文介绍)
  18. UTC时间转成北京时间
  19. win10管理员无法使用mklink的问题
  20. 融入动画技术的粒子效果文字动画交互应用

热门文章

  1. wget下载一个目录下的文件
  2. 一个IT经理眼中的RTX、Simba2013与Lync
  3. Id vs Instancetype
  4. EaglePHP开源框架全新改版(v1.8)
  5. 99%的人都不会的用户流失分析,到底应该怎么做?
  6. 无聊说说 strong VS weak
  7. 评论:北京“网店新规”将死在问题中
  8. 一个优秀的程序员应该如何提高工作效率?
  9. 我同事今天被裁了,但我却涨了1万工资!
  10. 一个程序员的逗逼瞬间(一)