zoukankan      html  css  js  c++  java
  • 【转】编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常

    建议67:慎用自定义异常

     除非有充分的理由,否则不要创建自定义异常。如果要对某类程序出错做特殊处理,那就自定义异常。需要自定义异常的理由如下:

    1)方便测试。通过抛出一个自定义的异常类型实例,我们可以使捕获的代码精确的知道所发生的事情,并以符合的方式进行恢复。

    2)逻辑包装。自定义异常可以包装多个其他异常,然后抛出一个业务异常。

    3)方便调用者编码。在编写自己的类库或者业务层代码的时候,自定义异常可以让调用方更方便处理业务逻辑。例如,保存数据失败可以分成两个异常“数据库连接失败”和“网络异常”。

    4)引入新异常类。这使程序员能够根据异常类在代码中采取不同的操作。

     现在举一个需要使用自定义异常的例子,在一个抽象工厂中,可以将数据设置保存在SQLServer或SQLite中。业务层的代码片段如下:

                IUserDal dal = DataAccess.CreateUserDal();
                try
                {
                    User user = dal.GetOneUser();
                }
                catch (SQLiteException ex)
                {
                    //处理SQLite异常
                }
                catch (SqlException ex)
                {
                    //处理SQLServer异常
                }

     这里虽然要捕获两个异常,但是显然,处理这两个异常的代码是一致的。另外,如果将来程序拓展成为数据存储在Oracle中,好需要为Oracle多设计一个Catch。所以在各自的数据层中,可以创建一个自定义异常DataAccessException,然后让它们各自捕获自己特定的异常,抛出一个共同的DataAccessException。

    例如,在SQLite的数据层中:

            public User GetOneUser()
            {
                try
                {
                    User user = null;
                    //查询数据库得到user
                    return user;
                }
                catch (SqlException)
                {
                    throw new DataAccessException();
                }
            }

     SQLite的数据访问层也是一样。本文开头的业务层代码可以改为:

                IUserDal dal = DataAccess.CreateUserDal();
                try
                {
                    User user = dal.GetOneUser();
                }
                catch (DataAccessException ex)
                {
                    //处理数据连接异常
                }

    转自:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    系统右键菜单添加剪贴板清空项(隐藏DOS窗口)
    C++实现黄金分割数列(斐波纳奇数列)(非递归)
    vbs让电脑发音说话
    修改远程桌面端口号.bat
    C#实现鸽巢排序
    C++用递归方式实现在对不更改随机数组的情况下查找最大值
    C# 实现 微软WebRequestMethods.Ftp类中的FTP操作功能
    C# “快捷方式” 实现程序开机启动
    C++ DateTime 结构
    C# UDP 连接通信 简单示例
  • 原文地址:https://www.cnblogs.com/farmer-y/p/7992884.html
Copyright © 2011-2022 走看看