【发布时间】:2012-01-27 03:18:23
【问题描述】:
根据.NET Framework General Reference: Error Raising and Handling Guidelines,在“正常”操作期间不应抛出异常。用户对 Web 表单的无效输入,比如用户输入了重复的名称,是否被认为是正常的? !!重要!!:我相信我们几乎都对此有意见,请附上对可靠来源的参考。
编辑:
更多背景知识:我正在质疑我正在阅读的一本书所提倡的模型验证方法。这本书建议您在提供要保存的无效数据时从存储库中抛出自定义异常。现在,在我看来,这违反了 MS 指导方针,因为您使用异常作为流控制......除非接收无效数据被认为是“正常”操作之外的。我只是想看看是否有来自可靠来源的进一步指导来解决这个问题。
另一个编辑:
好的,两年半后,我正在将此存储库移动到 WCF 服务,并在此方法中使用异常结果证明是个坏主意。哦,好吧。
【问题讨论】:
-
重名可能是个例外。无效的电话号码是非严重错误的更好示例。
-
根据您的编辑,我同意您正在阅读的书。你指的是哪本书?在我看来,应该保证包含我的实体的层是有效的——因此将无效数据传递给它们意味着堆栈更高层的某些东西是不正确的——无论是缺少/无效验证,需求的变化没有渗透到堆栈中,等
-
重要的是要注意,在许多情况下,输入数据在某一时刻的有效性可能表明,但不能证明,输入在未来的任何时间都是有效的.必须为发现有效的数据在检查时间和使用时间之间变为无效的情况做好准备。预先检查有效性可能有助于改善用户体验,并且提供“Try”方法以避免抛出异常可能会有所帮助如果调用代码准备好处理。您对异常有什么问题?
-
服务现在必须为异常指定 FaultContracts 并将异常作为 FaultException
s 抛出。此外,必须更改所有客户端代码以捕获 FaultException 。如果我在接口中指定了返回无效数据的方法,我可以继续使用现有接口而无需进一步修改。 -
@Paul:如果接口承诺返回有效数据,那么将规范更改为 void 该承诺将比引发异常更糟糕,不是吗?
标签: .net architecture exception-handling