运维.售后
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
博客
Blog
ToB门户
了解全球最新的ToB事件
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
就这么一个简单的校验,80%的程序员却做不到,更不理解 ...
就这么一个简单的校验,80%的程序员却做不到,更不理解! ...
农民
金牌会员
|
2022-9-2 22:15:22
|
显示全部楼层
|
阅读模式
楼主
主题
893
|
帖子
893
|
积分
2679
在学生管理系统里,其中会有学生信息采集的功能。程序结构不外乎下面的分层实现方式。
开发出来这个功能,我觉得大家都易如反掌了。
当然易如反掌。
OK,我要说的是数据校验,以最简单的非空校验(例如:学生姓名不可为空)来说:
首先,前端页面的表单要校验,为空则不允许提交,非空则调用后端api接口来post数据。
其次,后端程序的controller里要校验,为空则直接返回错误提示,非空则调用StudentService类。
再次,StudentService类要校验,为空则直接返回错误提示,非空则在其他校验通过后,进行数据的持久化。
上面的“再次”,在单体应用内不做校验也可————而一旦是在RPC调用的情况下,是必须要做的。
那么,聪明的你,有没有,或者曾经有没有,忽视上面的几处校验呢?
你也许会说No. ————肯定会做校验呀。
你也许还会说but why?————为什么要这么多处校验呢?一个地儿校验住不就完了吗?
First,为什么前端要校验?
--> 前端页面校验不通过时,则直接在页面提示给用户了,好处:①响应快,因为无须调用后端api,也减少了网络通信;②用户体验会好一些。
Second,前端已经校验了,为什么后端还要校验?
--> 正常情况下是不需要后端再校验了。非正常情况下呢?例如,前端没拦住,再例如,请求不是前端发过来的...
Third,为什么service类还要校验?
--> 上面说了,如果是单体应用,你不校验也行。而如果是局域网RPC服务之间调用的话,你还真要加上这个校验。也是为了防止非正常情况的。
多次一举?
实际企业应用开发中,类似的需要多处“重复”做的校验包括:数据合法性校验、数据重复校验、幂等校验(幂等控制)、数据唯一性校验(数据防重控制)。
你可以不“重复”做这些校验,而simply依靠请求链路里的only一个节点的校验来cover。在这种情况下,你的系统没出现问题,只能说明你比较幸运。一直没出现问题,说明你一直比较幸运。
最近我们系统是出现了这样的事故。一个中台dubbo服务提供了数据的新增接口,供下游业务线调用。系统运行了大半年也没出现问题,而最近却翻车了。一个业务线在特定的分支逻辑里缺乏有效的防重控制,致使在业务高峰期不停地重复刷这个接口(传递同样的数据),而这个dubbo接口里没有做业务防重。瞬时的高频调用,不仅让dubbo服务出现故障,还造成了大量的重复数据。随之而来的是运营的催促,客户的投诉,我们在处理重复数据时,耗费了大量的人力和时间成本。这一张多米诺骨牌,让我们付出了惨痛的代价。
我是因为遇到了这么一个事故才写这个blog吗?
不是!许多大的事故往往就是类似小疏忽导致的。我遇到的这样的事故简直太多了。
你没有遇到这样的事故吗?
我不信!
So,苦口婆心一番,愿小伙伴们别再为这样的疏忽而翻车。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
农民
金牌会员
这个人很懒什么都没写!
楼主热帖
数据库入门
肝了五万字把SQL数据库从基础到高级所 ...
iOS WebRTC 点对点实时音视频流程介绍 ...
java反射大白话
【R语言数据科学】(十二):有趣的概 ...
每日算法之数组中的逆序对
CentOS 7.9 安装 rocketmq-4.9.2
Java中set集合简介说明
Python分析睡眠数据
消息队列常见的使用场景
标签云
存储
服务器
快速回复
返回顶部
返回列表