• 编写高质量代码改善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个建议》陆敏技

  • 相关阅读:
    解决mysql错误1130的方法(远程出错)
    取消pve无效订阅弹窗命令
    测试环境主机执行脚本
    OpenStack Ocata版本安装
    OpenStack简介
    JVM内存分配及调优方案(基于JDK1.8)
    大数据之数据仓库
    clickhouse核心引擎MergeTree子引擎
    clickhouse高可用-节点宕机数据一致性方案-热扩容
    Clickhouse集群部署
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4738218.html
Copyright © 2020-2023  润新知