代码在运行时避免不了出现一些偏差的情况:值类型错误;使用流程错误;传参出错...。
通常做法就需要在‘业务逻辑代码’中引入额外‘错误 /异常’处理代码处理类似上诉情况的情况:根据业务逻辑重新决定执行流程或者提示信息。
慢慢会出现业务代码嵌套着一堆‘错误 /异常’处理代码,造成以后修改上阅读理解上的困扰。
其实楼主想问的是编程思想,编程语言随意。 不知道大家是否遇到下面情况,还是随便能快速干完工作就ok了,我们先抛开其它因素,就单单编程思想层面上讨论。
对于#1的描述,继承Exception类,然后抛出异常(try-catch),项目迭代多后,可能会出现这样情况:
class X1Exception extend Exception;
class X2Exception extend Exception;
class X3Exception extend Exception;
class X4Exception extend Exception;
// 根据业务情况,可能有多种Exception类型...
// 情况一
...
业务代码...
try {
业务代码...
} catch (X2Exception x2) {
处理x2异常代码..
} catch (X4Exception x4) {
处理x4异常代码..
}
业务代码..
try {
业务代码..
} catch (X1Exception x1) {
异常处理代码..
} catch (X3Exception x3) {
异常处理代码..
}
业务代码...
// 情况二
业务代码...
// 异常处理代码...
if (xx) {
if (xxx) {
thrwo new X1Exception;
} else {
thrwo new X2Exception;
}
}
业务代码...
// 异常处理代码...
if (xx) {
thrwo new X3Exception;
}
业务代码...
业务代码...
// 异常处理代码...
if (xx) {
thrwo new X4Exception;
}
业务代码...
就上面举例2种情况,对于业务逻辑的变更,会需要:维护Exception类,维护与业务逻辑嵌套一起的异常抛出代码,最后还要维护处理异常的代码。当这些一多了之后,笑容应该会逐渐僵硬吧。实际情况可能更复杂。
对‘优雅’的定义是:使用简单,容易维护。
1
Jrue0011 2019-03-22 14:48:36 +08:00
别人库的异常也只能 try-catch 吧,自己的业务异常可以像 Spring 那样继承 RuntimeException,controller 抛出后统一处理,不过没有编译器警告这点需要注意一下
|
2
pmispig 2019-03-22 15:04:02 +08:00
学习 GO 语言你就懂了,if err != nil 逼死你
|
3
atonku 2019-03-22 15:30:55 +08:00
logger.error("这是一个优雅的错误");
|
4
allgy 2019-03-22 16:29:50 +08:00
你这个问题应该这么问: 在某某语言中 如何优雅的使用错误 /异常
|
5
littleMaple 2019-03-22 16:56:17 +08:00
封装和抽象做得够好,就能够让你只用写 high level 的代码,所有 dirty 的异常处理都在底层去了
|
6
yccalculus 2019-03-22 22:33:41 +08:00
monad
|