博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET架构小技巧(8)——优待异常
阅读量:4034 次
发布时间:2019-05-24

本文共 2256 字,大约阅读时间需要 7 分钟。

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

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("");        }    }    ///     /// 大美医疗信息系统,这是我起的名,整个系统异常类    ///     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()        {        }    }    ///     /// His 异常类    ///     public class HisException : DaMeiException    {        public HisException(string message) : base(message)        {        }        public HisException() : base()        {        }    }    ///     /// 挂号模块异常类    ///     public class RegisteredException : HisException    {        public RegisteredException(string message) : base(message)        {        }        public RegisteredException() : base()        {        }    }    ///     /// Lis 异常类    ///     public class LisException : DaMeiException    {        public LisException(string message) : base(message)        {        }        public LisException() : base()        {        }    }

转载地址:http://utkdi.baihongyu.com/

你可能感兴趣的文章
自己动手写GC
查看>>
Java 8新特性终极指南
查看>>
logback高级特性使用(二) 自定义Pattern模板
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>