大佬们, 关于 Java 后端空判断

5 小时 57 分钟前
 vyuai
大佬们, 这种过滤是不是多余的啊, 数据库设计了部门 id 不能为空, 前端也加了校验, 后端还要进行多步的空判断吗, 有点晕了, 一般在什么情况下做这种多步的空判断啊
https://imgur.com/5RXY9q2
以下图片是改造的, 会有什么问题嘛, 是不是到这种程度就可以了
https://imgur.com/jWhJzYu

主要为了学习代码编码风格和规范, 看哪些开源项目比较好啊, 或者看什么别的东西

目前看的是 SmartAdmin 这个开源项目学习, 大佬们有了解的嘛, 看哪位作者的风格比较好呢, 若依实在不喜欢, 目前觉得这个 SmartAdmin 对我帮助很大

补一个问题 Java 后端大部分人都说 CRUD, 企业中 CRUD 到底是什么样子的, 一般一个后端会分多少个表啊, 或者分多少个模块啊, 学到什么程度可以, 一直没有概念, 距离辞职, 已经学习一年了
1098 次点击
所在节点    Java
19 条回复
oneisall8955
5 小时 4 分钟前
改的没问题,直接 map 提取部门 id 过滤就行
oneisall8955
5 小时 2 分钟前
不用纠结这一点,能看懂就行。实际对运行速度没啥影响,结果也是一致的
vyuai
4 小时 49 分钟前
@oneisall8955 看懂是稍微能看懂, 就是比较纠结, 不知道每次自己写的时候该怎么判断, 判断哪些
CLMan
1 小时 57 分钟前
因为前面已经过滤 null 了,后续就不需要再检查 null ,所以你改得没啥问题。其次这代码本身就怪怪的,分页查询返回的 List 包括 null 元素(难道是返回固定长度的 List?)

感觉你应该没有太多编程经验,去看这种后台管理项目,去扣它的业务逻辑细节,实际上是走入了误区,想得太多写的太少。这种项目就是用来二次开发的,你自学根本没有实际的需求,看这种只有皮而无肉的空架子代码,那自然会陷入“这里要不要检查 null”,“这里为啥用 Throwable 而不是 Exception”等基本上没啥意义的实现细节。

我的看法是,真正能够有所收获,建立信心的是写自己的项目。你去找一个自己感兴趣且熟悉的领域,找到切入点,写一个至少能用的应用,不需要功能多丰富,实现多完美,至少其是自洽的,麻雀虽小,五脏俱全。比如你的求职目标是 Java 后端,那就去仿一个网站,从需求分析、数据库设计、后端实现、前端实现、应用部署一步步做起,并且去相关垂直领域宣传,给别人使用。
vyuai
1 小时 15 分钟前
@CLMan 感谢大佬, 主要真的花的时间太多了, 以前都是看黑马和尚硅谷的视频学, 现在去看开源的后台系统感觉比那些视频里教的重复不规范的内容好太多了, 而且我前端没有系统的学习过, 现在前端已经不看了, 现在前端都工程化了, 要学的东西实在太多太多, 我感觉一个 Java 已经耗尽所有精力了
iyiluo
59 分钟前
后端肯定要做判空,无论什么时候后端的入参都要校验,这是防御性编程。前端不可靠,你怎么知道用你系统的是人还是机器,数据库是用来保存数据的,如果把判空逻辑放到数据库,那这个系统得烂到什么程度,绝对是个屎山
miaotaizi
52 分钟前
@vyuai 才这么点就算多????

没写出 30W 行代码别说自己花的时间多
Shinu
50 分钟前
db 里面做了非 null, 去掉 null 判断倒是没啥问题, 就是可能某些代码校验工具里面会报 error 或者 warn.

但如果你不确定 "是否要判断 null", 那就果断判 null 吧, 浪费不了多少效率
dddd1919
48 分钟前
前端校验是改善用户体验,可选
后端校验是系统逻辑处理,必选
yuanxiaosong
43 分钟前
1. 前端约等于用户输入,永远不要相信用户的输入是正确的,参见测试工程师那个段子;
2. Throwable 有两个子类,Error 和 Exception ,打开 Error 的源文件,注释上明确写了:……because most applications should not try to catch it.(翻译一下:因为大多数应用程序都不应该尝试捕获它),通常我们认为是一些硬件上或者 JVM 的问题,此时程序已经不能正常运行,事务回滚也没什么意义了。
yuanxiaosong
41 分钟前
Error 都不提倡捕获,父类 Throwable 就更不应该处理了,所以一般都是直接处理另一个子类 Exception 。
cowcomic
40 分钟前
你这套逻辑,加不加这个判空都可以
我的建议是如果你的业务逻辑需要这里的 id 不能为空,就自己加上,不要把这个控制交给数据库
毕竟这个字段不是主键,有可能后续因为什么原因就改成可为空了
wolfie
39 分钟前
这不是可选过滤,这个就不应该过滤。(除非在别人代码加逻辑怕出问题)

万一有人把映射改了,这个字段查不到值了,要第一时间抛出异常,而不是业务逻辑错误。
spritecn
21 分钟前
你定义一个字符串参数,前端传"NULL"串,""串,还有"undefind"串都是常有的事
hiveex
19 分钟前
后端不要怕琐碎 有备无患
DreamingCTW
16 分钟前
没具体看楼主写的内容,单从前后端的 null 判断来说,我不管前端有没有判断 null ,我后端都会判断。因为正常用户会走你的前端页面,非正常用户是直接调用接口的。
249239432
15 分钟前
前端能校验?有人直接走协议提交参数到后端呢?
sadwxds
13 分钟前
一开始我以为是接口对请求参数的非空校验,那这个是很有必要的,避免接受到空值导致后续的业务逻辑出现异常。
但是你图片中的代码,是对数据库返回结果进行非空的过滤,这是我无理解的。

既然是对数据库的查询,那所有的过滤都应该通过 SQL 语句进行,可以利用索引,减少 IO ,分页功能也才准确。

实际开发的时候,因为时间精力的问题,也很难对所有的地方进行非空校验,要不就不会有那么多空指针异常了。
一般情况下,对于服务外输入的值,可以认为是不可信的,做好非空和其他的参数校验。

数据库这种和服务绑定的,可以通过字段属性设置为非空,我是觉得没必要程序里面再加个非空判断。
cheng6563
11 分钟前
产生 Error 都是底层问题,你写的 Java 代码无法处理这种问题,一般出现 Error 是建议直接重启进程。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1083417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX