
代码在运行时避免不了出现一些偏差的情况:值类型错误;使用流程错误;传参出错...。
通常做法就需要在‘业务逻辑代码’中引入额外‘错误 /异常’处理代码处理类似上诉情况的情况:根据业务逻辑重新决定执行流程或者提示信息。
慢慢会出现业务代码嵌套着一堆‘错误 /异常’处理代码,造成以后修改上阅读理解上的困扰。
其实楼主想问的是编程思想,编程语言随意。 不知道大家是否遇到下面情况,还是随便能快速干完工作就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 |