Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 利用ValidationException类_C#_.net_Validation_Exception_Exception Handling - Fatal编程技术网

C# 利用ValidationException类

C# 利用ValidationException类,c#,.net,validation,exception,exception-handling,C#,.net,Validation,Exception,Exception Handling,我遇到过这样一种情况,我们的一位开发人员希望制定一个标准,在我们的所有应用程序中加入System.ComponentModel.DataAnnotations.ValidationException。例如,用户将坏数据输入表单,我们的业务逻辑层抛出ValidationException,该异常在调用层处理 然而,我担心这个异常类被断章取义地使用,有一天我们将使用一些动态数据控件来利用这个异常,很难区分他何时使用ValidationException和动态控件引发异常的时间 我们已经使用了一个名为

我遇到过这样一种情况,我们的一位开发人员希望制定一个标准,在我们的所有应用程序中加入System.ComponentModel.DataAnnotations.ValidationException。例如,用户将坏数据输入表单,我们的业务逻辑层抛出ValidationException,该异常在调用层处理

然而,我担心这个异常类被断章取义地使用,有一天我们将使用一些动态数据控件来利用这个异常,很难区分他何时使用ValidationException和动态控件引发异常的时间

我们已经使用了一个名为“OurCustomException”的自定义异常类,我认为最好只是将其子类化,然后创建一个OurCustomValidationException类。通过这种方式,不同类型的例外情况可以清楚地显示出来

有什么意见吗

。。。很难说出真相 他什么时候做决定 使用ValidationException与 动态控件升起的次数 例外

我认为这是你在做决定时应该考虑的要点

您似乎暗示上述情况(无法区分您自己的异常和“平台”验证异常)是一件坏事。情况未必如此。如果您使用ValidationException以独占方式表示验证错误,那么您的所有代码都可以以相同的方式正确处理您自己的异常和平台异常。不需要从定制平台中删除特殊情况平台例外

我认为这是一场胜利。如果出于相同的原因,CustomException和ValidationException都返回到顶级层,则必须以某种方式重复某些逻辑。这是一件坏事(更多的维护,更多的虫子爬进来的机会)

因此,我的观点是,使用平台ValidationException可能是一种很好的方法,只要您严格地使用它来传播验证问题

还可以考虑这样一种情况,即您将向第三方提供/销售您的部分代码(说它很酷,您可以用它制作产品)。对于第三方来说,如果您的模块抛出“标准”异常(他们可以很容易地将其集成),而不必对您的模块的所有接口代码进行特殊处理,这可能会更容易。同样,只有在标准模块抛出ValidationException的情况下,这才有效

让我们换个角度看。你说:

我们的业务逻辑层抛出ValidationException

这就是为什么我严格地把放在上面的原因。您需要确保您同意什么是验证错误。让我们看两个假设问题:

  • “abc”不是有效的数字
  • 这项行动资金不足 对于1,问题是简单/预期的输入验证错误。 但在我看来,2。事实并非如此。这是一个业务逻辑问题。你可以称之为验证问题(在交易中,在借记之前,你“验证”是否有足够的可用资金),但我认为它在语义上非常不同

    我建议不要将这两种类型的错误放在同一个异常“包”中,因为它们具有非常不同的含义,并且可能(通常)导致不同的应用程序流逻辑。(在上面两个例子中,1.应该让用户保持完全相同的表单,就像任何其他类型的“打字”问题一样,但2.应该让用户进入一个允许他重新填写帐户的页面。)


    总而言之:对我来说,使用标准异常似乎是个好主意,只要你坚持其预期的语义。

    你提出了非常好的观点,但遗漏了他问题的关键部分。你能断章取义地使用它来解决这个问题吗(第二段)?我的整个帖子就是针对这个问题的。如果您在希望动态数据控件也抛出“标准”ValidationException的地方使用该选项,那么就很好了。但你必须确保你只在这种情况下才扔。i、 e.仅在特定情况下抛出验证异常。感谢您的澄清。回答得好,我同意。写得很好,马特。我百分之百同意你的观点。谢谢你抽出时间!