zoukankan      html  css  js  c++  java
  • 如何全面的把握一个系统的异常处理

    对于一个大的系统来说,异常处理必须要有一个总的策略和方针,并在组织内贯彻执行,否则就很难把异常处理好。

    1. 从整个系统全局的角度来看
      1. 进程内错误----用异常来报告错误(内部错误);底层模块通过异常来向高层模块报告错误的发生。
      2. 进程间错误----用ErrorCode, ErrorMessage, Action来向外部系统报告错误(业务错误),尤其是对外提供公共服务,除非是对外不公开的子系统,此时可以使用原生的异常来报告错误。一旦错误超出服务边界,最好使用ErrorCode, ErrorMessage, Action的方式向外部报告。
    2. 从进程内不同模块的角度来看
      1. 底层模块:DLL,一般不需要Catch异常;尽量多的使用Try--Finally;除非定义的自己的异常。
      2. 高层模块:EXE等,尽量在高层模块中处理异常,报告错误。
    3. 从不同的系统类型的角度来讲
      1. 服务型:7* 24小时,通常情况下要确保系统的任何情况下都不要Crash,系统发生的任何Exception都要有Log,有些情况下可能还需要发邮件来通知。
      2. UI型:友好的给出用户提示信息。必要的时候可以使用AOP来在全局唯一的点来处理Exception。
    4. 实际的异常处理规则
      1. 异常类必须符合标准,必须可以序列化。
        [Serializable]
        public class ExampleException : ApplicationException
        {
        public ExampleException()
        : base()
        {

        }

        public ExampleException(string message)
        : base(message)
        {

        }

        public ExampleException(string message, Exception inner) :
        base(message, inner)
        {

        }

        protected ExampleException(SerializationInfo info, StreamingContext context) :
        base(info, context)
        {
        }
        }
      2. 不能丢掉任何一个异常,通常情况下要使用InnerException来保持原始的异常。
            try
        {
        //Read configuration from file
        ...
        }
        catch (FileNotFoundException ex)
        {
        throw new ExampleException("Can't find the configration file.", ex);
        }
      3. Catch异常后如果不Throw的话,必须Log异常。
      4. 记ExceptionLog时必须包含栈信息,也就是要使用ToString方法。
  • 相关阅读:
    [zt]VisualStudio2005技巧集合你真的会使用断点吗?
    轻松掌握Windows窗体间的数据交互
    Real Multithreading in .NET 2.0
    [zt]petshop4.0 详解之八(PetShop表示层设计)
    9.6 english log
    浅谈“三层结构”原理与用意
    [zt]petshop4.0 详解之四(PetShop之ASP.NET缓存)
    [虚拟技术]你会选谁:Red Hat还是Ubuntu KVM虚拟化?
    [虚拟技术]Linux KVM与Xen,QEMU的性能比较
    [虚拟化平台技术]选择哪一种虚拟化平台 KVM还是Xen?
  • 原文地址:https://www.cnblogs.com/zanxiaofeng/p/Exception.html
Copyright © 2011-2022 走看看