记得很久以前,以以C#为主要工作内容时,曾经和同事们以及在cnBlogs中不下数次讨论关于如何用好异常处理的问题,当时得到的结论是:异常处理在程序正常运行时并不会在效率上有太大的影响,仅仅在程序抛出并捕获了异常时效率上才会显得有那么一点点的影响。
今天我们不谈效率,仅就该如何提高程序的健壮性做一点讨论。
依照以前的经验,异常处理应该遵守如下规则:
1.在UI层捕获异常,并忽略可以忽略的异常,不可忽略的异常应该做出相应的处理,并将它程序给用户
2.在BL层尽量不处理异常,如果非要处理,那么请保证该异常不会影响到系统正常的运行
3.能够使用自定义异常的部分,请使用自定义异常,否则请一定要catch(Exception)
如果遵照以上三个规则,并且很好的对产生的异常进行处理,那么我们的程序便会很大程度上提高其健壮性。
如果你所使用的框架中为了提高程序的健壮性,使用的不是try Exception的方式,而是用自定义Error的方式进行处理,那么一旦有任何的异常抛出,并且你没有及时的将这个异常传递给你自定义的Error,那么,恭喜你,你以后就不要担心没事可做了!因为一切都是你定义的一个Error类,并且在进行业务逻辑处理的时候,如果不满足相应的业务逻辑,你便把相应的信息放到该Error中,然后再要求其他层调用该方法时捕获该Error,并对其进行处理……试想,如果一个新手来到了你的项目组,对你的这一套处理逻辑不是很清楚的话,就是不获取你的Error,也不对其进行处理!!OMG……那就等着生产机上出现一些莫名其妙并且无法找到任何的蛛丝马迹的BUG吧……
假如您是一个框架的设计者,请一定仔细考虑如何能使以后使用该框架的人能够捕获您框架底层产生的错误,也要考虑到以后使用您的框架设计的程序能够正常运行,能够平稳的运行每一天。
假如您是一个使用了“错误”而非“异常”的框架使用者,如果您有能力改造您的框架,那么这是最好的事情,如果您无力改造您所使用的框架,那么即便该框架设计的再糟糕,也请努力使您写出的程序健壮一些,不要让您写的程序太脆弱……