目前在处理返回值方面,有两种代码风格:
一种是这样:
另一种是:
一种是这样:
result = method1(); if (result is error){ //根据返回结果判断是否退出 ...//加错误码 return result; } result = method2(); if (result is error){ //根据返回结果判断是否退出 ...//加错误码 return result; } do something...
另一种是:
try{ method1() // 如果有逻辑问题抛出ErrorCodeException method2() // 如果有逻辑问题抛出ErrorCodeException do something... }catch(ErrorCodeException e){ // 将ErrorCodeException异常转换为Result return result; }但是我推荐采用第二种方式,理由主要有三个方面: 1. 从重构的角度来说,如果一个方法中有多个return出口,当方法膨胀之后需要将一块代码抽取出来单独形成一个方法的时候比较困难,而采用异常的方式则可以很容易的抽取出单独方法. 2. 从代码重用的角度来说,第一种如果method1,method2方法有多个地方调用,这些需要调用的地方大部分情况下都要对结果进行判断加错误码并返回结果,这个是重复的代码,这样重复性代码在ic中是随处可见的,我希望通过抛错误码异常的方式来减少这种重复的东西. 3. 从封装的角度来说,将非正常结果的处理封装在方法的内部,可以提高内聚性. 这样做的两个缺点: 1. 必须将method1,method2套在一个try...catch中,然后将ErrorCodeException转换成result. 2. 还有一些方法的确需要根据情况自己处理返回值的,不希望抛出异常,你必须提供一个不抛出异常的方法 3. 在性能上,因为需要使用到异常堆栈,这个会有一定的性能损失,如果是分布式应用的话,尽量改错误码,而不是异常,因为异常比简单的错误码方式序列化的成本会更高 我采用第二种方式是来自于对这样的语句变体: 有些方法在开始处都会对参数进行检查的卫语句,比如非空,非0检查,如果参数不合格抛出IllegalArgumentException(如果不是因为要返回错误码,完全可以抛出IllegalArgumentException).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。