合理的异常分层是怎样的

异常处理的重要性已经无需再提了,也是JAVA不同于C++的非常重要的地方,我们使用异常来标明函数执行结果,而不再使用单纯的返回值形式处理。这样带来了几个显而易见的好处:

1. JAVA的异常处理可以通过框架提供,从而保证异常处理的一致性

  在项目开始搭建开发框架时,就应该提前进行设计,并将异常处理灌输给开发人员,并定时监督异常处理在正常轨道。

2. JAVA的异常处理为分层处理提供了技术基础

    不同的开发层次可以抛出不同的异常,拿简单的三层开发模型来说,如DAO层异常(SQL异常,数据库连接池异常,MYBATIS异常等);service层异常,封装DAO层异常,并加入业务异常;Portal层对业务异常进行捕获并处理。

  当然有人说我整个系统部分层次抛出同一种异常难道不可以么?当然可以,关键是我们既然提高了分层,就不希望存过多的异常越界从而破坏了层次之间的封装性,合理的处理应该是上层仅看到下层的异常。但这在实际的开发中是很难实现的,开发人员总是想将麻烦交给上层处理,美其名曰:透传。

  从工作量上来讲,在不同层次捕获并封装成上层的异常看似增加了工作量,但从框架明晰的角度上来讲,我认为还是值得的。

  对于运行时异常不再赘述,起始是我也不知道应该如何处理。

3. 采用异常处理可以更加明晰的处理异常

  这部分主要是与C++做的比对,异常可以继承,异常名字可以表意,异常可以捕获,可以重新构造,这将从前分离的异常处理改为横向切片,提高了异常处理的规范性(灵活性其实也得到了保留)。

  在JAVA的高级特性中,甚至可以使用AOP等对异常进行处理。

 PS:

在现在进行的项目中,框架仅仅定义了一种运行时异常,用于整个项目处理,按照异常的分类,能够恢复的异常定义为检查型异常,不能恢复的异常定位运行时异常,这样来看,这种异常设计肯定是不合理的。

posted @ 2013-07-23 14:44  纪玉奇  阅读(813)  评论(0编辑  收藏  举报