crclz 最近的时间轴更新
crclz

crclz

V2EX 第 379541 号会员,加入于 2019-01-23 20:05:13 +08:00
crclz 最近回复了
仅仅考虑楼主提出的需求,提出以下解决方案:

表 X(年月 int, 流水号 int)。例如(202111, 1)

def GenerateOrderId() -> str:
年月 = 获取当前年月()
num=( update 表 X set 流水号=流水号+1 returning 流水号)
return 格式化(年月,num )

如果数据库并发不够,可以流水号=流水号+10 之类的,然后服务端将生成的 id 全局缓存起来。

这样做不会错的,我司就是这样干的。
异常处理原则如下,对无 gc 语言都适用:

1. go 和 java 的异常处理思路( exception vs errorcode )没有本质区别

2. 异常代表了 ExecutionFailure ,代表了 exceptional 。execution failure = exceptional.
ref: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/exception-throwing
如果这种情况并非 exceptional ,那么请以 errorcode 返回(或者 xxresult )。
评价:如果你对异常和 errorcode 两种等价的形式的应用场景不明白,那么这一条可以指导你。

3. 吞调异常代表了未知到已知的转换。(未知:exceptional 。吞掉:catch 而不 rethrow )
解释:catch 而不 rethrow 代表了:对于被调函数,这种情况是 exceptional 的,但是对于调用者来说不是。

4. 不忽略未知异常。
翻译:不 catch Exception ,而是 catch SomeException 。
理由:未知异常代表着潜在的 bug 。
例外:根异常捕获器需要 catch Exception ,但是如果是未知的异常,需要通过报警系统通知开发者。

5. catch 、rethrow 、打印日志是正交的概念。
示例 1:rethrow+打日志代表了遇到了 exceptional 的情况,并且想要记录一些诊断信息。
示例 2:只 catch 不 rethrow+打日志代表了遇到了意料之中的错误,并且想要记录一些诊断信息。


对于楼主的问题,以下是具体回答:

在我们公司,数据库驱动层会打日志(和 metrics ),以跟踪具体库的成功率指标,提升可监控性。
开发者如果想要获得面向业务的监控指标,那么需要自己 catch+打日志(+metrics )。(因为一个业务操作可能涉及多个数据源、多次查询)
那么,catch+打日志后是返回 errorcode 还是 rethrow ?请参考 1-5.
初始实现没啥问题,第二版过拟合了(现在最简,但是不能很好应对新需求)
对代码有极致的追求是一个很稀缺的素质。
我之前还蛮影响使用的。之前习惯抱着笔记本在床上看剧,中途有事,笔记本一合一开,然后再播放( b 站),画面就会卡住,但是声音还会继续播放。然后捣鼓键盘 20s 后,就会回复正常,挺影响体验的。浏览器是 edge 。firefox 不存在这个问题。

楼主可以尝试把 edge 的“使用标签页休眠功能节约资源”关掉,看看是否能够解决问题(我没试过)
43 天前
回复了 xinhaiw 创建的主题 .NET IdentityServer 收费了?
@gaojiangouyu autofac tdd 我还靠它
kde 永远的神
47 天前
回复了 NeverBoom 创建的主题 生活 我想逃避现实
加油楼主
48 天前
回复了 balabalaguguji 创建的主题 Jira 怎么国内没人模仿个 Jira 呢 ?
试试飞书的多维表格的看板视图,比较简洁,功能没有 teambition 丰富,没有权限控制等东西,目前我用于管理私人的工作进度。
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4054 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 02:11 · PVG 10:11 · LAX 18:11 · JFK 21:11
♥ Do have faith in what you're doing.