• .NET架构小技巧(8)——优待异常


      天有不测风云,人有旦夕祸福,程序呢——会有异常错误。

      C#中用try,catch,finally来捕捉处理异常,捕捉谁的异常呢?一般都是系统类库或三方类库中抛出的异常,那如果我自己架构程序,异常也是要好好考虑的一个方面。

      首先要给自己的异常定义好级别,建议按产品(DaMei),项目(His,Lis),模块来(Registered),它们依次是后者的父类,产品的父类是ApplicationException,整理来说是个树状结构。这些异常在自己的对应的模块中使用,这样的好处是,如果需要集中处理一些事务时,可以在父类的构造中进行集中处理,不用细化到每个细节的异常子类中。这样做还有一个好处是在web项目中,我们可以判断是自定义的异常,可以进行分类处理,是系统的异常,可以作另一分支处理。

      当然,要整理项目代码中,我们尽量不要用抛异常这种相对粗暴的方式来处理,而以业务分支的方式来处理反面分支(如返回false),从而把错误或提示体现出来(比如控制台用Console,winform用MessageBox.Show,web就要返到前端提示了);如果我们是独立的dll,不知道怎么提示,有可能调用端是winform或web,需要报出错误,这时就要用throw的方式来反馈异常了。

      class Program
        {
            static void Main()
            {
                try
                {
                    throw new HisException("his数据库未初始化!");
                }
                catch (RegisteredException exc)
                {
                    Console.WriteLine(exc.Message);
                }
                catch (HisException exc)
                {
                    Console.WriteLine(exc.Message);
                }
                catch (DaMeiException exc)
                {
                    Console.WriteLine(exc.Message);
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.Message);
                }
                finally
                {
    
                }
                Console.WriteLine("");
            }
        }
    
        /// <summary>
        /// 大美医疗信息系统,这是我起的名,整个系统异常类
        /// </summary>
        public class DaMeiException : ApplicationException
        {
            public DaMeiException(string message) : base(message)
            {
                Console.WriteLine("{0},{1}", DateTime.UtcNow.ToString("yyyy-MM-ss HH:mm:ss"), message);        
            }
            public DaMeiException() : base()
            {
            }
        }
        /// <summary>
        /// His 异常类
        /// </summary>
        public class HisException : DaMeiException
        {
            public HisException(string message) : base(message)
            {
            }
            public HisException() : base()
            {
            }
        }
        /// <summary>
        /// 挂号模块异常类
        /// </summary>
        public class RegisteredException : HisException
        {
            public RegisteredException(string message) : base(message)
            {
            }
            public RegisteredException() : base()
            {
            }
        }
        /// <summary>
        /// Lis 异常类
        /// </summary>
        public class LisException : DaMeiException
        {
            public LisException(string message) : base(message)
            {
            }
            public LisException() : base()
            {
            }
        }
    想要更快更方便的了解相关知识,可以关注微信公众号 
     

     

  • 相关阅读:
    Hdu3022 Sum of Digits
    bzoj3864 Hero meet devil
    bzoj2448 挖油
    poj3783 Balls
    bzoj3802 Vocabulary
    Hdu5181 numbers
    Hdu5693 D Game
    图形填充之边标志算法
    图形填充之栅栏填充算法
    图形填充之种子填充算法
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/15854585.html
Copyright © 2020-2023  润新知