通用平台exception handling系统的设计与实现

现在设计一个exception handling系统。

server端用的是Spring+ibatis.
大的构想是用spring的aop技术在合适的地方catch住异常,然后进行一些处理,处理模块基本上是.net的exception handling block的架构,简单的说就是配置exception handler,然后进行处理。

常见的handler包括
wrapExceptionHandler:对异常进行转换再抛出。
replaceExceptionHandler:对异常进行替换再抛出。
logExceptionHandler:对异常打log然后抛出。
passHandler:不做如何处理,直接抛出。

对于checkedException和uncheckedException的选择。个人认为Spring的异常处理比较好。即对用户来说可以rollback的异常用checkedException,对于用户无法处理的异常用uncheckedException.

对于javaeye关于异常的讨论,似乎遗漏了一个很重要的对异常进行的分类方法。即异常可以分为系统启动时异常和系统运行时异常。启动时异常还是用uncheckedException比较好,fail fast嘛。并且一旦在启动时遇到异常,系统直接down掉,只有配置好的系统才可以运行。这应该算是一种个人喜好。

对于一些特殊的API,如login,个人认为用异常进行区分是不好的,针对这种特殊的异常,可以设计返回值,用来区分用户可处理的异常情况,如password错等。

这个设计的主要问题是performance,但是我还没有测试过。一个健壮的系统产生的异常应该不会很多。

error code还是很重要的,不然会导致异常泛滥,没有办法,只有自定义一些error code了。这也算是一种折衷了,毕竟一大堆异常是不好的味道。

你可能感兴趣的:(spring,AOP,.net,ibatis,performance)