在 sdk 的 client 中是否应该处理异常

2023-05-25 16:38:17 +08:00
 EddieWang

我觉得应该在 sdk 处理异常,其他人直接拿到处理之后的结果直接用就行了。 组长觉得应该将异常处理交给使用 sdk 的人

893 次点击
所在节点    程序员
6 条回复
renfei
2023-05-25 16:42:05 +08:00
SDK 无法处理所有的异常

比如你传入的账号密码错了,报了个 401 错误,我帮你处理了异常,返回个 null

你外部调用死活只接收到 null ,你作为调用者你懵逼不
xuanbg
2023-05-25 16:45:20 +08:00
SDK 当然不处理异常啊。多管闲事会要命的啊
thinkershare
2023-05-25 17:02:02 +08:00
当然是应该将异常传递给最终 SDK 的消费者,主要是看异常是谁制造的,谁制造的交给谁处理。因为异常就是个简化的通知机制,如果你尝试糅合异常和 Result 这 2 种消息传递机制,只会给自己制造更多痛苦。如果调用方是最终消费者(无法理解你系统的内部逻辑),那可以考虑返回返回一个稍微包装的友好异常。
x77
2023-05-25 17:13:40 +08:00
你组长是对的,谁产生的异常谁处理,SDK 是个被动模块它主动去处理异常(极少数 SDK 内部产生的异常除外)会让增加耦合度
dzdh
2023-05-25 17:20:14 +08:00
你不能不处理也不能全部处理

最近正巧也在整内部的 sdk ,跨多个系统,多个系统的输出格式有几个是不一致的。

这种情况就需要 sdk 在针对这几个服务的调用时拿到对应格式的响应并处理整理成统一的响应格式,还有错误比如有的是 data.errors!=null ,有的是 data.code ==401 。 那么 sdk 要自己二次封装处理,统一抛出异常给调用方,调用方无须关心这几个服务的原来的输出结果。

至于网络异常、调用逻辑异常,服务端的业务异常,都应该经过 sdk 统一二次处理(统一收集错误信息和调用栈)后再抛出,处理不是屏蔽,是整理和封装
EddieWang
2023-06-19 16:47:07 +08:00
我之所以想要在 sdk 里面处理,是因为调用方其实不是很关心报错的具体内容。只需要拿到结果判断就好了。
当然最后还是交给调用方处理了准备

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

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

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

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

© 2021 V2EX