业务流程我们是用try{}catch{}来控制,还是用if()来控制?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

业务流程我们是用try{}catch{}来控制,还是用if()来控制?

2016-03-10 16:03:15 2263 2

1.比如说用户查看某些内容,我们要判断他是否有权限查看,这个时候我们应该是定义一个异常来处理,还是直接if()来处理?
2.catch{}有规范说抛给哪个层统一处理吗?还是根据实际情况各各层处理?
3.网上说try{}catch{}会对性能有影响,影响究竟多大?

这个问题本质应该是想问这两种控制流程到底有什么区别,就像Vicky和iMouseWu解释的那样,比如说try{}catch{}会交给JVM,这样做是提高了程序的健壮性,还是提高了程序的XX,请各位答主先抛弃try{}catch{}只能用来处理异常的想法再回答该题.
如果各位还有更好的回答,我会继续关注,采纳各位的答案,共同学习.

取消 提交回答
全部回答(2)
  • big蕉
    2019-07-17 18:57:50
    如果是可识别的异常,用try catch。正常的业务逻辑用if
    0 0
  • 蛮大人123
    2019-07-17 18:57:50

    看上面回答都是一致使用错误码来控制业务流程,我来说说我自己的想法

    什么是异常?

    An exception (or exceptional event) is a problem that arises during the execution of a program. When an Exception occurs the normal flow of the program is disrupted and the program/Application terminates abnormally, which is not recommended, therefore these exceptions are to be handled

    按照这个解释,我们是不是也可以把业务上的错误当做一个异常流程来处理?
    所以当业务上出现比如题主说的「没有权限访问」,可以抛出一个异常。当然也可以通过接口返回错误码的方式完成。
    换个角度来看这个问题,来看下Java API中的一段代码

     public String getCanonicalPath() throws IOException {
        if (isInvalid()) {
            throw new IOException("Invalid file path");
        }
        return fs.canonicalize(fs.resolve(this));
     }

    那我们能不能把这个接口改成用错误码的方式来传递错误信息呢,当然也是可以的。至于Java API为什么在这里选择了用异常而不是用错误码,我想你也不希望你在你的代码的中需要对很多方法进行错误码判断吧,而我们的业务接口相对少一点,所以如果用错误码不会显得十分臃肿。
    至少到现在为止可以得出一个结论结论:用异常或者用错误码来控制业务流程都是可取的,只要整个团队统一风格就OK了。
    回到题主的问题上来,用异常来控制业务流程和用错误码来控制到底有什么优点和缺点。
    用错误码控制业务流程,需要对每个接口的返回都要做一个错误码的校验,判断的代码会遍布在你的业务代码里面。优点就是对调用方,不必对你的接口进行异常校验,因为你的接口只可能返回「正确」或者「错误」,在效率上面也会更加高一点。对某些人来说,用错误码来控制业务流程更能符合「异常」的语义。
    用异常来控制业务流程,可以把错误处理集中在一处,对客户端的代码编写更加友好,在业务代码里面不会有很多错误码的判断。缺点就是创建异常堆栈是需要时间和空间的,但是可以通过子类覆盖父类的fillInStackTrace来解决。

    0 0
添加回答
相关问答

1

回答

请问batch_write 对数据的行数 或者 批数据的大小有限制么?

2022-08-08 17:20:11 139浏览量 回答数 1

0

回答

请问nacos支持tls吗?

2022-07-18 13:13:38 442浏览量 回答数 0

1

回答

云存储网关CSG如何在本地控制台上使用块网关?

2020-03-31 11:06:28 420浏览量 回答数 1

1

回答

云存储网关CSG如何在本地控制台上使用块网关?

2020-03-31 11:13:06 479浏览量 回答数 1

6

回答

我的.ml/.cf域名需要备案吗

2019-01-15 19:33:55 5632浏览量 回答数 6

1

回答

一个56g的regionserver 多少region 比较合适,阿里的每台机器 region 个数有控制原则?

2018-11-15 12:51:08 1660浏览量 回答数 1

2

回答

www.y9ds.com 域名无法访问,虚拟主机死机无妨重启

2018-10-25 18:35:14 608浏览量 回答数 2

1

回答

www.ss3y.com 违规网页被禁止访问,现在控制台找不到该虚拟主机的设置页面。

2018-08-21 16:48:48 527浏览量 回答数 1

1

回答

java中什么时候try catch

2018-05-10 20:09:31 2244浏览量 回答数 1

1

回答

关于php中的try catch问题

2016-03-09 15:33:50 1636浏览量 回答数 1
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
文章
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载