创建自定义断言类

时间:2011-12-04 06:47:36

标签: c# constructor assertion

我正在关注Fail Fast校长。我想知道是否有一个Assertion类来检查我的构造函数参数参数是否是一个好习惯。

例如:

public static class Assertions
{
    public static void ParamterIsNotNull(object subject, string paramName = "")
    {
        if (subject == null) throw new ArgumentNullException(paramName, "Paramter cannot be null");
    }
}

并在使用中:

public class Test
{
    public Test(object obj)
    {
        Assertions.ParamterIsNotNull(obj, "obj");
    }
}

这是一个好的做法,可以将抛出的异常卸载到另一个类,还是最好直接在构造函数中抛出异常?

1 个答案:

答案 0 :(得分:1)

从我读过的文章(在文章的最后)Martin说,做两件事都很好 - 快速失败,提供有意义的例外和“缓慢失败” - 让用户忍不住让我们说联系支持并继续执行可以成功完成的任务,无论例外情况如何。

在这种情况下,批处理系统示例非常好 - 虽然批处理中的1个项目可能会令人厌倦,但用户很可能希望其余部分能够使用,这就是为什么抛出全局处理程序捕获的异常的原因(全局处理程序决定继续下一个项目并聚合错误,以便它可以向用户显示并向开发团队发送通知)。

这两种方式都已完成 - 大部分用户都已完成工作,并且还会触发快速失败原则。

所以这取决于你的具体情况 - 也许如果你的类参与其他操作,会有更多的全局类(或使用它的调用者类),这将能够更好地决定它是否可以继续。< / p>

另一方面 - 你的类不应该能够判断调用类是否可以在发生故障时执行其他工作,因此你需要在构造函数中抛出异常,是的。 这就是我的想法 - 是的:)。因此,如果您的类表示批处理的项目 - 调用者很可能会捕获异常并继续。如果它是某种入口点类 - 那么你可能想要优雅地处理异常(或者根本不抛出它),向用户显示一条错误消息,并为开发团队提供详细信息(日志)以便能够轻松告诉问题出在哪里。