很诱人的标题,今天不是给大家介绍,而是跟大家讨论些问题。

在做开发的这几年中,大大小小的项目也经历了很多,但无论那个项目中,都没有真正的对Exception进行完整的处理。虽然我们在学C#的时候,经常会看到此类的介绍,但我们真的学以致用了吗?

先来看看什么是Exception

Exception的解释是异常,每次当我们程序调式的时候,或多或少的会遇到它(如果你的程序没有遇到过,那你是天才)。Richer在它的书中,反复的提到,Exception是对原有接口的一种违背。一开始我反复不能理解,当我真的去考虑这个问题,深入这个主题的时候,我才明白了,它就是一种违背,参数错、对象空等等我们常见的异常,都是因为我们对接口的定义有违背了,所以系统才会抛出异常。

例:

var str = "int";

int i = Convert.ToInt32(str);

这个转换会抛出一个异常出来,虽然Convert.ToInt32(string str)是一个合法的方法,但是输入的str必须是能转换成Int值的,否则就回抛出异常。这是对它方法定义的一种违背。

Exception 不等于 Error

错误的解释很广泛,可能包含了异常,但是Exception 不等于 Error 的

稍微简单的介绍了一下异常,我想很多开发者一定对它非常熟悉了,但是真正对它的处理,我们做的并不好,很多人认为原有的系统异常已经足够我们去寻找bug了,我们只需要测试到位就可以了,但这是错误的思想,这也是可怕的思想,因为你不知道何时何地何处会抛出一个你不知道的异常,Win Form应用程序遇到了异常是非常可怕的,如果没有处理,就会直接关闭应用程序,在我们Web Application中,虽然HttpApplication会对我们未处理的异常封装,抛出一个UnhandlingException,对你要知道,你的网站可是面对着不同的用户,他们看到如此结果会如何呢?有人会说,我用错误页面来包装一下,这样看上去是友好化的。没错,这是一个解决方案,可你想过吗?你要如何去知道这些Exception呢?除非你的网站人员遇到了,会及时通知你,但如果是客户遇到呢?

我们不能守株待兔,我们是合格的程序员,我们的代码是我们的孩子,我们必须给他最好的,包括他生病,我们就得马上给他医治,如果没有生病,我们也必须打疫苗、提高抵抗力,也要及时想好应对方案,以免到时候会手忙脚乱。所以我们必须要有一套好的解决机制,才能应对各种突发事件。

真正完美的解决方案有吗?我可以很肯定的告诉你,没有。无论是开发何种应用程序,你的开发人员、环境、编程习惯、开发流程都会影响到这一套解决方案,如何解决,我的观点是:从人开始。

代码是死的,人是活的,我们必须时刻的意识到,我们是为创造程序而生的,不是为解决工作而做的,程序的美,是人之美,程序之bug,乃人之bug,一个程序的好坏,其实就能看出一个人的思维。应用程序发生异常,不代表是开发者的无能,这或许是一个好的体验机会,让你更好的能学习到解决之道。

在处理Exception的时候,我们需要注意几点,大家可以看另外一篇"设计异常解决方案的几点注意事项",这是最近看到一本书中介绍的,这是网上找来的中文版,非常好的。这些规范很大程度上让我们能处理很多Exception了,但是,还是那句话,从人开始,开发者的应用、开发者的思维都是很重要的,一个公司统一的技术规范,是非常有必要的,在其他代码中,你可以随意,但是在处理异常的时候,你必须按照这个规范来,因为他真的非常重要而又非常容易忽视的,每个公司都应该对其进行一定的培训,代码的Review,都是必不可少的。

单元测试

单元测试虽然也是一种解决方案,但并不是每个单元测试都会解决你系统中的Bug。

说了这么多,其实我想让大家了解异常的重要性,也让大家在开发过程中,能尽量想到这些,以免造成不可设想的后果。

后续我会给大家带来一定的解决方案,结合这几年的经验,开发一套通用的ExceptionHandling,当然这还需要大家对我的支持:P

出处:http://www.cnblogs.com/inday/archive/2009/04/17/1437657.html

异常处理--Exception(一)的更多相关文章

  1. 异常处理—Exception(三)

    最近有点事,把这个系列给落下了,给大家道个歉,这里还要感谢我的老婆,谢谢她一直对我的支持:) 系列回顾: 1.异常处理--Exception(一) 2.异常处理—Exception(二) 上一篇中主要 ...

  2. 异常处理—Exception(二)

    在上一篇中"异常处理--Exception(一)"中,跟大家简单介绍了一下Exception,也使大家充分的了解了Exception管理在一个项目中的重要性,那如何在我们的项目中处 ...

  3. 异常处理 Exception

    一.异常类 1.在C#中所有的异常都是使用一个异常类型的示例对象表示的,这些异常类型都是继承自System.Exception类型,或者直接使用System.Exception类型的实例对象: 2.在 ...

  4. ORACLE PL/SQL异常处理(Exception)学习笔记

    1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...

  5. Akka(26): Stream:异常处理-Exception handling

    akka-stream是基于Actor模式的,所以也继承了Actor模式的“坚韧性(resilient)”特点,在任何异常情况下都有某种整体统一的异常处理策略和具体实施方式.在akka-stream的 ...

  6. java异常处理Exception

    我看别人的面经中有一道题目就问到了Exception,即java的异常处理的,我曾经也学了java的异常处理,可是我查了下,看了别人的博客关于写的exception异常处理.我发现,自己学的不坚固,仅 ...

  7. Java自学-异常处理 Exception

    Java 异常 Exception 异常定义: 导致程序的正常流程被中断的事件,叫做异常 步骤 1 : 文件不存在异常 比如要打开d盘的LOL.exe文件,这个文件是有可能不存在的 Java中通过 n ...

  8. java 异常和异常处理Exception

    Java Exception: 1.Error 2.Runtime Exception 运行时异常3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系统 ...

  9. Python之异常处理-Exception

    在写python程序时, 不要害怕报错, 也不要怕自己的英语不够好, 不要看到一有红色的字就心里发怂. 其实报的错也是有套路可寻滴~识别了异常的种类, 才能对症下药. 常见异常: Exception ...

随机推荐

  1. Dubbo本地开发技巧

    背景 作为后端服务负载.前后分离的主要手段,dubbo在业界中使用率还比较高.随着Dubbo系统的增多,本地开发.调试就出现了麻烦之处 直接在开发本地起同样一份服务 由于Dubbo采用负载均衡的策略, ...

  2. 玲珑oj 1128 RMQ模板

    1128 - 咸鱼拷问 Time Limit:3s Memory Limit:128MByte Submissions:380Solved:118 DESCRIPTION 给你两个序列A,B.每个序列 ...

  3. IOS-启动图和开屏广告图,类似网易

    作者:若锦 原文链接:http://www.jianshu.com/p/e52806516139 启动图是在iOS开发过程中必不可少的一个部分,很多app在启动图之后会有一张自定义的开屏广告图,点击该 ...

  4. activiti 动态自定义流程(包含会签流程)

    后台加入工作流步骤(这个不重要,自己实现) package com.blk.integrated.pojo; import java.io.Serializable; import java.util ...

  5. js从数组中随机获取n个不重复的数据

    做云课堂的作业时遇到一要求,实现刷新页面时显示不同数据,(数组中20个据,页面加载10个).思路就是从0-19中随机生成10个不同的数,让数组取下标输出数据. 下面是在num的范围内生成n个不重复的数 ...

  6. 重温ASP.NET WebAPI(二)进阶

    重温ASP.NET WebAPI(二)进阶   介绍 本文为个人对WebApi的回顾无参考价值. 本文内容: Rest和UnitOfWork 创建WebAPi的流程 IOC-Unity的使用 MEF ...

  7. 嵌套类,PIMPL

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  8. C++设计模式之-工厂模式的总结

    工厂模式分为3种,即简单工厂模式.工厂方法模式.抽象工厂模式,其实大同小异,总结下来就是: 简单工厂模式:一个工厂,多个产品.产品需要有一个虚基类.通过传入参数,生成具体产品对象,并利用基类指针指向此 ...

  9. Apache .htaccess文件

    今天在将ThinkPHP的URL模式由普通模式(URL_MODE=1)http://localhost/mythinkphp/index.php/Index/user/id/1.html改为重写模式 ...

  10. ffmpeg jpeg图片播放失败之问题排查

    播放jpeg时,avformat_find_stream_info出现以下问题,排查: [jpeg_pipe @ 0x146a80] Could not find codec parameters f ...