一个class里完成复杂业务的增删改查是什么体验。

一个 数据 接口 复杂 详情 完成 class 权限 职位 业务 编程进阶笔记
发布日期 2022-09-07 更新日期 2022-09-07 阅读次数 70 文章字数 1.3k

一般来说,一个复杂的业务,首先会有很多涉及很多文件,但由于项目的历史原因,我能调用的就只有一个文件,里面也只有一个class,很多已经写固定了,动弹不得。

该 class 里,每个方法都是一个接口,完成极度复杂的业务,也只能一个个方法往里堆。

当然,看起来都挺正常,但是说一说更恶心的:

  • 商家状态需要手写sql校验,多少个接口就要写多少次
  • 数据库表的字段非常庞大,可能一个表上百个字段,而数据返回时全是字符串(?这个情况确实是存在的,如pdo默认),但经过接口处理后必须还原为 int 或 float
  • 详情接口,复杂程序根据页面不同所需不同
  • 数据权限控制,不同页面所需不同(比如数据不能删除,都有一个 del 字段,商品有上架下架状态,审核状态等,有时删除的也要能查看,有时下架的、审核不通过的也要查看等等)
  • 到这还不是最离谱的,关键是需求经常变化,设计稿也是频繁修改,你一直在写,设计一直在改,写多久设计就改多久...

基于以上种种,必须要给每个方法封装起来,一层一层的,否则重复写的太多了(写最少的代码完成需求,因为代码越多,在频繁改动的情况下越吃亏,越容易出错),比如每个接口,都要强制 int ,float几十个字段,属实恶心到了。

权限控制

考虑到有时候就连“已经删除”的数据,都要能查看,已经不能简单的写死sql条件了。

考虑了一下,从最原始的:“没有条件”开始设计,给 class 增加了一个权限控制属性(默认没开启),如果开启权限,则调用数据时没有任何条件

第一种: if( $this->$right){  $where = "" }  ,当权限开启时,sql 的 where 就是空的,保证能查询数据,这是针对一个 id 查询数据的“情况”

第二种:先把数据查询出来,然后在接口的最后,做权限控制,如果开启了权限直接返回,如果没开权限,则判断数据是否合法,比如该数据中 del=1 则返回“数据不存在”等

接口分层

接口分层,是最关键的。

比如,前面说到的:一条数据,int 和 float 几十次,这肯定受不了。

获取数据的详情,首先只获取本表基本数据,作为基础接口。

比如,获取一个职位信息,前端需要连公司信息一起获取(这两个信息在两个表里),但职位详情不应该简单的把这两个数据混合在一块儿返回,否则职位详情接口每次都会携带公司详情。

可以做一个基础的职位详情:只返回职位表信息

然后做一个更丰富的职位详情:携带职位信息和公司信息(先调用基础接口,得到基础数据后增加字段)

正常的一个详情接口,给做成了两个,或多个

这样做不仅仅把详情分离出来了,而且在列表页面,可以先查出所有职位id,然后根据id,传递给详情接口,直接获取详情接口的数据(不用担心会多携带一次公司信息,因为已经分层了),也不用再每次 int 和 float 了。

增删改查的一些技巧

增删改,都相对简单,只要一个sql即可,复杂的情况也可以只有一个sql,就是前端同时传递要修改的字段名,这样就不用一次性全部更新(前端可能多种update,要修改的字段也不同,想要一个接口完成,不仅仅要传值,还得让前端告诉你更新哪些字段)。

查询非常多,而且处理很复杂,多封装一些方法,比如查指定数据,就封装为 detail 接口,列表接口时,无论多复杂,只要查询得到 id,再循环调用 detail 接口完成数据的获取。

尽管现实很离谱,但如果能解决得好,反而是对个人能力的一个很好的提升。


文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-51.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

一个 数据 接口 复杂 详情 完成 class 权限 职位 业务

发表评论

相关推荐
朱丰华   |   7个月前   |   git

git从缓存中移除数据git rm --cached

408    评论    点赞
朱丰华   |   1年前   |   checkbox

checkbox默认传值问题

389    评论    点赞
朱丰华   |   1年前   |   页面 · 监听

iframe子父页面信息传递与监听

375    评论    点赞
朱丰华   |   1年前   |   linux

linux保持后台进程不被关闭nohup &

254    评论    点赞
朱丰华   |   1年前   |   git

git push -u参数是什么意思?--set-upstream

244    评论    点赞
朱丰华   |   1年前   |   git · hub · 仓库

go克隆并引用github仓库

147    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

172    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

198    评论    点赞
朱丰华   |   1年前   |   < · iframe

让iframe嵌入的视频自适应 (100%宽度)?

122    评论    点赞
朱丰华   |   1年前   |   js · 重复

js如何避免重复监听addEventListener事件?

123    评论    点赞
朱丰华   |   1年前   |   编译 · linux · 平台

Go 交叉编译 (跨平台编译)

172    评论    点赞
朱丰华   |   1年前   |   正则 · 表达

正则表达式,实现if...then...else

112    评论    点赞
朱丰华   |   1年前   |   mysql · 变量 · sql

MySQL实现行号-自定义变量

112    评论    点赞
朱丰华   |   1年前   |   变量 · mysql · sql · 用户

MySQL用户自定义变量

94    评论    点赞
朱丰华   |   1年前   |   sed · 文件

Shell 指定行处理head、tail、sed

155    评论    点赞
朱丰华   |   1年前   |   linux · 内容

linux环境下,对于一个大文件,如何查看其中某行的内容

68    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 字符串

如何在 PHP 中将字符串的第一个字母转换为大写

148    评论    点赞
朱丰华   |   1年前   |   linux · 文件 · 行数

linux 取得文件行数

49    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 正则

php正则表达式原生字符

85    评论    点赞
朱丰华   |   1年前   |   html · <

html浏览器当前tab标签切换时触发监听

105    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞