在作数据库的读写操作时大家有没过一种奇怪的焦虑感?

2020-01-04 14:36:38 +08:00
 webcoder
明明系统里已经约定了,运行到某个代码前数据库里肯定会有这个记录,但写的时候总有种这记录可能不存在的焦虑而会写上一大堆的校验检查甚至是如果不存在就创建的代码,而且在写时还会有种这代码正式使用时估计一辈子也不可能运行到的感觉,从而进化成,既然运行不到为什么还要写啊,的奇怪情绪。
4737 次点击
所在节点    程序员
27 条回复
lxml
2020-01-05 01:45:19 +08:00
@wuchujie #19 哈哈哈,是我没错了
go 语言日常操作

// 从数据库中读一行记录

xxx ,err := dao.Find()xxx


// 出现错误错咋办
if err != nil
// 处理拿不到的错误
if err = ErrNotFound
// 处理其他奇奇怪怪的错误
else{
}


// json 序列化一下,反序列化出错又咋办
err = Unmarshal()



求求 go 语言的老大爷们 早点出错误一把梭方案吧,我知道这样写确实能方便处理错误,但是写业务写多了,实在是非常崩溃啊
lihongjie0209
2020-01-05 10:24:56 +08:00
我担心服务器的内存在某一时刻内存数据受到物理影响被改变了, 怎么办
asj
2020-01-05 11:41:34 +08:00
说明业务逻辑和数据库存取耦合了。
Takamine
2020-01-05 12:28:06 +08:00
……Java 只把异常区分了 checked 和 unchecked,没考虑到突然停电了怎么办。
:doge:
crclz
2020-01-05 20:19:42 +08:00
根据业务代码的行为,根据逻辑推演,可以证明:运行到某处,某条件一定成立。(这也是“约定”的数学基础)
如果某个条件没有被满足,那么就说明它的数学基础不满足:一定是代码有 bug,或者 DBMS 有 bug,或者是有其他未遵守约定的程序(或者人)随意的修改了数据库的记录。

假设某记录不存在,那么你在访问模型类(假设用 orm )的成员的时候(也可以主动检查)就会抛出空引用异常,然后就可以查看 log,排查以上三条中的哪一条出了问题。
站在普通成员的角度,通常只有第一条是你的锅,那么就在业务代码中做足测试,并且在业务代码中加上(适量的)判断约定条件是否成立的语句。

站在
crclz
2020-01-05 20:20:40 +08:00
(接上文)
站在系统负责人的角度,要防御到各方面的因素,那么就请使用 [事件溯源] 模式。
shawnsh
2020-01-06 09:57:56 +08:00
@wzzzx 我说的是没电机器就不能跑,不能判断下没电也让机器跑吧.

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

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

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

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

© 2021 V2EX