【转】编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常
2021-04-23 17:59
标签:数据存储 cat sqlserver 逻辑 根据 dal 保存数据 精确 抽象 建议67:慎用自定义异常 除非有充分的理由,否则不要创建自定义异常。如果要对某类程序出错做特殊处理,那就自定义异常。需要自定义异常的理由如下: 1)方便测试。通过抛出一个自定义的异常类型实例,我们可以使捕获的代码精确的知道所发生的事情,并以符合的方式进行恢复。 2)逻辑包装。自定义异常可以包装多个其他异常,然后抛出一个业务异常。 3)方便调用者编码。在编写自己的类库或者业务层代码的时候,自定义异常可以让调用方更方便处理业务逻辑。例如,保存数据失败可以分成两个异常“数据库连接失败”和“网络异常”。 4)引入新异常类。这使程序员能够根据异常类在代码中采取不同的操作。 现在举一个需要使用自定义异常的例子,在一个抽象工厂中,可以将数据设置保存在SQLServer或SQLite中。业务层的代码片段如下: 这里虽然要捕获两个异常,但是显然,处理这两个异常的代码是一致的。另外,如果将来程序拓展成为数据存储在Oracle中,好需要为Oracle多设计一个Catch。所以在各自的数据层中,可以创建一个自定义异常DataAccessException,然后让它们各自捕获自己特定的异常,抛出一个共同的DataAccessException。 例如,在SQLite的数据层中: SQLite的数据访问层也是一样。本文开头的业务层代码可以改为: 转自:《编写高质量代码改善C#程序的157个建议》陆敏技 【转】编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常 标签:数据存储 cat sqlserver 逻辑 根据 dal 保存数据 精确 抽象 原文地址:http://www.cnblogs.com/farmer-y/p/7992884.html IUserDal dal = DataAccess.CreateUserDal();
try
{
User user = dal.GetOneUser();
}
catch (SQLiteException ex)
{
//处理SQLite异常
}
catch (SqlException ex)
{
//处理SQLServer异常
}
public User GetOneUser()
{
try
{
User user = null;
//查询数据库得到user
return user;
}
catch (SqlException)
{
throw new DataAccessException();
}
}
IUserDal dal = DataAccess.CreateUserDal();
try
{
User user = dal.GetOneUser();
}
catch (DataAccessException ex)
{
//处理数据连接异常
}
文章标题:【转】编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常
文章链接:http://soscw.com/index.php/essay/78591.html