异常处理 Exception

每层做相应的处理,向外抛出更抽象的异常信息,或处理信息,日志处理,UI层捕获异常,日志处理。--层层上抛。捕获异常只是为了做自己的处理,异常本来会自动抛出不捕获的话。innerExeception异常几乎不影响性能,不要用来做正常的逻辑判断

----------------------------底层写try catch还是必要的,但是必须throw出来。表现层可以不throw了,直接处理。

如果在底层就捕获处理,那样你就不知道异常是否发生,发生的情况
各层处理不同级别的异常,底层抛出,ui逻辑层捕获写日志,都要try,catch
每个方法都写,何必呢?通过HttpModule对未处理异常进行处理就可以了。
你可以自己抛,如果不抛的情况,系统会自动为你抛出来的
底层可以封装一些自己的逻辑,可以把一些已知的异常处理掉,或者返回某种结果,或者抛出其它类型的异常。
原则是,能处理的异常就处理,不能较好的处理的异常就往上层抛。

-----------异常是API设计的一部分,一个方法抛出哪些异常是事先确定的,而无论底层实现是如何。 例如MethodInfo.Invoke方法,出错后肯定会抛出ReflectionException(我乱写得异常,打个比方),但是事实上这个接口内部可能抛出了ArgumentEXception,SqlException任何类型异常。 这就需要内部try...catch,把异常捕获,作为innerException,然后抛出新异常。 -----------底层try...catch...处理系统的Exception,抛出自定义Exception,UI只处理自定义的Exception...
一般情况下,应该在底层捕获异常(这个异常应该是项目自定义异常),当捕获到异常时,可以做同步的异常日志记录,供维护查阅.并同时想UI上抛此异常信息,并显示友好的错误信息. 

aop集中对方法异常处理。


另外,对于多层系统,最好不要将最底层的异常直接传递到最上层,最上层根本就无法知道发生了什么事,也无法实施有效的措施。最好是在每一层都捕获下层的异常,能处理的直接处理,不能处理的,抛出一个有意义的异常,并将捕获到的异常作为innerException放到这个异常里。
如果将所有的异常捕获都放在UI或者系统的最上层,说明你跟本就没考虑过如何处理异常,最多就是log一下,然后显示个错误信息而已。
我一般的做法是,建立一系列自定义异常,形成一套自定义异常体系。这主要是根据系统具体要求分类封装系统本身异常,类似于Facade的感觉。然后,只在UI部分进行异常处理。这里既就可以根据异常种类进行不同处理动作了。 
以前是在aspx.cs中用try catch做,现在用了ASP.NET MVC,基本是用拦截器来做统一的异常处理了。


该不该抛异常,与所在层级无关,只与所在方法的规范(specification)有关,即该方法是否有责任处理此异常。通常有三种情形:一、不在该方法职责之内。该方法应直接将异常包装后以更抽象的形式抛给更高层。二、部分由该方法负责。该方法对异常进行一些处理,然后重复情形一的行为。三、完全由该方法负责。此时在方法内做相应处理,不再为此抛出异常。
如此,一个异常从底层开始冒泡,一步步地走向高层,一步步地被处理,异常的形式也进化得越来越高级,越来越离开底层,直到最终用户(最终用户将看到一个他们能够理解的出错信息,而不是底层错误)。这是异常机制的意义所在。

http://www.cnblogs.com/tianzhiliang/archive/2010/10/09/1846676.html

http://www.cnblogs.com/alisx/archive/2009/06/12/1502251.html

http://www.cnblogs.com/dawave/archive/2008/07/14/1242134.html

http://www.cnblogs.com/anderslly/archive/2007/03/14/understandingexception1.html

http://www.cnblogs.com/anderslly/archive/2007/03/15/675642.html

http://www.cnblogs.com/GrayZhang/archive/2008/06/27/1231308.html
http://www.cnblogs.com/zhuweisky/archive/2005/09/10/233961.html
throw,throw ex(会重置异常环境,体现在捕获 该异常的位置为throw的位置)
能判断出来的异常,尽量不使用try..catch来

www.LcKey.com 提供支持 

转载于:https://www.cnblogs.com/thomaswu/archive/2011/05/09/2041676.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值