在 sdk 的 client 中是否应该处理异常 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
EddieWang
V2EX    程序员

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

  •  
  •   EddieWang 2023-05-25 16:38:17 +08:00 1212 次点击
    这是一个创建于 871 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    6 条回复    2023-06-19 16:47:07 +08:00
    renfei
        1
    renfei  
       2023-05-25 16:42:05 +08:00
    SDK 无法处理所有的异常

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

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

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

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

    至于网络异常、调用逻辑异常,服务端的业务异常,都应该经过 sdk 统一二次处理(统一收集错误信息和调用栈)后再抛出,处理不是屏蔽,是整理和封装
    EddieWang
        6
    EddieWang  
    OP
       2023-06-19 16:47:07 +08:00
    我之所以想要在 sdk 里面处理,是因为调用方其实不是很关心报错的具体内容。只需要拿到结果判断就好了。
    当然最后还是交给调用方处理了准备
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1069 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:58 PVG 01:58 LAX 10:58 JFK 13:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86