很诱人的标题,今天不是给你们介绍,而是跟你们讨论些问题。html
在作开发的这几年中,大大小小的项目也经历了不少,但不管那个项目中,都没有真正的对Exception进行完整的处理。虽然咱们在学C#的时候,常常会看到此类的介绍,但咱们真的学以至用了吗?程序员
先来看看什么是Exception 编程
Exception的解释是异常,每次当咱们程序调式的时候,或多或少的会遇到它(若是你的程序没有遇到过,那你是天才)。Richer在它的书中,反复的提到,Exception是对原有接口的一种违背。一开始我反复不能理解,当我真的去考虑这个问题,深刻这个主题的时候,我才明白了,它就是一种违背,参数错、对象空等等咱们常见的异常,都是由于咱们对接口的定义有违背了,因此系统才会抛出异常。post
例:单元测试
var str = "int"; 学习
int i = Convert.ToInt32(str); 测试
这个转换会抛出一个异常出来,虽然Convert.ToInt32(string str)是一个合法的方法,可是输入的str必须是能转换成Int值的,不然就回抛出异常。这是对它方法定义的一种违背。网站
Exception 不等于 Errorspa
错误的解释很普遍,可能包含了异常,可是Exception 不等于 Error 的设计
稍微简单的介绍了一下异常,我想不少开发者必定对它很是熟悉了,可是真正对它的处理,咱们作的并很差,不少人认为原有的系统异常已经足够咱们去寻找bug了,咱们只须要测试到位就能够了,但这是错误的思想,这也是可怕的思想,由于你不知道什么时候何地何处会抛出一个你不知道的异常,Win Form应用程序遇到了异常是很是可怕的,若是没有处理,就会直接关闭应用程序,在咱们Web Application中,虽然HttpApplication会对咱们未处理的异常封装,抛出一个UnhandlingException,对你要知道,你的网站但是面对着不一样的用户,他们看到如此结果会如何呢?有人会说,我用错误页面来包装一下,这样看上去是友好化的。没错,这是一个解决方案,可你想过吗?你要如何去知道这些Exception呢?除非你的网站人员遇到了,会及时通知你,但若是是客户遇到呢?
咱们不能守株待兔,咱们是合格的程序员,咱们的代码是咱们的孩子,咱们必须给他最好的,包括他生病,咱们就得立刻给他医治,若是没有生病,咱们也必须打疫苗、提升抵抗力,也要及时想好应对方案,以避免到时候会手忙脚乱。因此咱们必需要有一套好的解决机制,才能应对各类突发事件。
真正完美的解决方案有吗?我能够很确定的告诉你,没有。不管是开发何种应用程序,你的开发人员、环境、编程习惯、开发流程都会影响到这一套解决方案,如何解决,个人观点是:从人开始。
代码是死的,人是活的,咱们必须时刻的意识到,咱们是为创造程序而生的,不是为解决工做而作的,程序的美,是人之美,程序之bug,乃人之bug,一个程序的好坏,其实就能看出一我的的思惟。应用程序发生异常,不表明是开发者的无能,这或许是一个好的体验机会,让你更好的能学习到解决之道。
在处理Exception的时候,咱们须要注意几点,你们能够看另一篇"设计异常解决方案的几点注意事项",这是最近看到一本书中介绍的,这是网上找来的中文版,很是好的。这些规范很大程度上让咱们能处理不少Exception了,可是,仍是那句话,从人开始,开发者的应用、开发者的思惟都是很重要的,一个公司统一的技术规范,是很是有必要的,在其余代码中,你能够随意,可是在处理异常的时候,你必须按照这个规范来,由于他真的很是重要而又很是容易忽视的,每一个公司都应该对其进行必定的培训,代码的Review,都是必不可少的。
单元测试
单元测试虽然也是一种解决方案,但并非每一个单元测试都会解决你系统中的Bug。
说了这么多,其实我想让你们了解异常的重要性,也让你们在开发过程当中,能尽可能想到这些,以避免形成不可设想的后果。
后续我会给你们带来必定的解决方案,结合这几年的经验,开发一套通用的ExceptionHandling,固然这还须要你们对个人支持:P