我正在关注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");
}
}
这是一个好的做法,可以将抛出的异常卸载到另一个类,还是最好直接在构造函数中抛出异常?
答案 0 :(得分:1)
从我读过的文章(在文章的最后)Martin说,做两件事都很好 - 快速失败,提供有意义的例外和“缓慢失败” - 让用户忍不住让我们说联系支持并继续执行可以成功完成的任务,无论例外情况如何。
在这种情况下,批处理系统示例非常好 - 虽然批处理中的1个项目可能会令人厌倦,但用户很可能希望其余部分能够使用,这就是为什么抛出全局处理程序捕获的异常的原因(全局处理程序决定继续下一个项目并聚合错误,以便它可以向用户显示并向开发团队发送通知)。
这两种方式都已完成 - 大部分用户都已完成工作,并且还会触发快速失败原则。
所以这取决于你的具体情况 - 也许如果你的类参与其他操作,会有更多的全局类(或使用它的调用者类),这将能够更好地决定它是否可以继续。< / p>
另一方面 - 你的类不应该能够判断调用类是否可以在发生故障时执行其他工作,因此你需要在构造函数中抛出异常,是的。 这就是我的想法 - 是的:)。因此,如果您的类表示批处理的项目 - 调用者很可能会捕获异常并继续。如果它是某种入口点类 - 那么你可能想要优雅地处理异常(或者根本不抛出它),向用户显示一条错误消息,并为开发团队提供详细信息(日志)以便能够轻松告诉问题出在哪里。