【问题标题】:Use of existing framework ConstraintException for data constraint violations使用现有框架 ConstraintException 处理数据约束违规
【发布时间】:2012-07-17 23:09:09
【问题描述】:

我有一个独立的应用程序,在将平面文件导入 SQL 数据库之前对其进行数据检查。

在这样的情况下,抛出System.Data.ConstraintException 有意义吗? (这个例子是人为的。)

if(_keys.ContainsKey(key))
{
    throw new ConstraintException(string.Format("Uniqueness violated! " + 
        "This unique combination of '{0}' already found on line {1}", 
        GetUniquenessColumnList(), _keys[key] ));
}

ConstraintException's documentation 声明它“表示尝试违反约束的操作时引发的异常。”

这样使用内置异常有问题吗?有没有更好的使用?我是否应该自己构建,即使这个例外似乎是根据我的情况量身定制的?

【问题讨论】:

    标签: c# exception system.data


    【解决方案1】:

    我想你已经回答了自己的问题

    ...这个例外似乎是为我的情况量身定做的?

    为什么要重新发明轮子?

    编辑:

    查看这篇 MSDN 文章:Choosing the Right Type of Exception to Throw

    考虑抛出驻留在系统中的现有异常 命名空间,而不是创建自定义异常类型。

    ...

    不要为了让您的团队例外而创建和抛出新的例外。

    【讨论】:

      【解决方案2】:

      不,这样做没有问题。如果已经存在合适的异常,则无需创建新异常。

      【讨论】:

      • 同意,尽管派生一个新的(自定义)类(可能会公开一些额外的属性以获取有关异常的更多详细信息,例如 ViolatedKey)也是一个(好的,也许是第二个?)选项。例如,这将使“提取”“违反的键(值)”更容易,因为您不必依赖从实际消息(字符串)中获取它。请确保在考虑此选项时将YAGNI 放在脑后。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多