exception与validation

我刚遇到一个捕获exception的属性设置器(所有exception;我知道这很糟糕,但这里没有关系), 记录它们。 首先,我认为它也应该再次通过它们; 为什么等到崩溃和日志研究,你什么时候才能知道什么是错的?

但是,我的主要问题是,我是否对无效日期值进行validation,将RuleViolation对象添加到我的文档上的ValidationRules对象,或者抛出InvalidDateexception,或者让CLR为我抛出​​exception(无效日期只是无效的日期,未检查范围等)

只要方法或类成员无法完成它要完成的任何任务,就应该抛出exception。

因此对于属性设置器,如果setter无法设置属性,那么它应该抛出exception。

至于你是否应该抓住它并重新抛出它,答案是肯定的,但是只有你需要在setter中立即处理exception,然后再将它传递给堆栈……但是记录它并不是理由。 一般情况下,您应该在更高级别实现exception的跨领域日志记录,其中exception不会被重新抛出……如果您正在处理堆栈中某些交叉问题,那么就不会,绝对不要抓住并重新抛出相同的exception。

但是,如果您正在编写工具或框架库,您希望组件的客户端具有明确定义的预期exception集,并且您已定义了自己的自定义exception,组件将抛出到客户端代码,以及哪个客户端组件可能会看到,然后您可能希望捕获CLR生成的exception并重新抛出您自己的自定义exception。在将自定义exception“InnerException”属性传递给堆栈之前,始终在其中包含Actual基础exception,以便将数据放入它适用于最终消耗它的任何系统。

这取决于手头的具体任务。 如果您正在编写将用作其他程序中的组件的库类,并且该类方法的契约表明它应该只接受有效日期,那么抛出exception就可以了。

如果您接受用户输入,然后等待exception是一种不好的做法。 在这种情况下,您应该自己validation日期。

例外情况适用于特殊情况,不应成为您逻辑的一部分。 这通常意味着合同被程序员破坏了。

我认为这取决于日期值的来源。 如果它来自用户输入或其他来源,完全可以输入“无效”日期,那么validation将是最佳选择。 另一方面,如果没有可预见的原因导致数据值无效,则抛出exception是合适的。

这实际上取决于您的应用程序的逻辑。 只有在特殊情况下才能真正抛出exception 。 对于类似validation的内容,它取决于无效数据的容差。

当您构建一个交互式应用程序并且用户可能输入任何内容时,文档可能会进入无效状态,您应该通过文档类的属性公开validation信息。

如果您正在处理来自数据库或日志文件的预先准备的文档,那么文档可能无效并且在此之后继续操作可能会损坏系统中的数据。 当发生这种情况时,你应该抛出

捕捉和重新抛弃是最糟糕的事情。 如果你只是要重新抛出这一点,它的价格是否很高? 您可以使用global.asax捕获未处理的exception,例如,如果您需要记录它们。

在validation方面,从Web的角度来看,我总是使用正则表达式validation器来表示日期,这些火客户端和服务器端因此我知道什么时候我在里面

if(Page.IsValid) 

阻止我的txtDate.Text是一个有效的日期,所以我不打扰检查,因为它只是浪费。