C# 创建自定义断言类

C# 创建自定义断言类,c#,constructor,assertion,C#,Constructor,Assertion,我在跟着校长。我想知道是否有一个断言类来检查我的构造函数paramater参数是一种好的做法 例如: public static class Assertions { public static void ParamterIsNotNull(object subject, string paramName = "") { if (subject == null) throw new ArgumentNullException(paramName, "Paramte

我在跟着校长。我想知道是否有一个断言类来检查我的构造函数paramater参数是一种好的做法

例如:

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");
    }
}
这是将异常抛出转移到另一个类的好做法,还是直接将异常抛出到构造函数中更好?

从我所读到的内容(在文章末尾)Martin说,两件事都做是好的-快速失败,提供有意义的异常和“缓慢失败”-让用户能够联系支持人员,并继续完成可以成功完成的任务,无论异常情况如何

在这种情况下,批处理系统示例非常好-尽管批处理中的一项可能出现故障,但用户很可能希望处理其余的项,这就是为什么您抛出一个由全局处理程序捕获的异常(全局处理程序决定继续处理下一项并聚合错误,以便向用户显示错误并向开发团队发送通知)

通过这种方式,两者都完成了——大部分用户的工作都完成了,同时也启动了快速失败原则

所以这取决于您的具体情况——如果您的类参与其他操作,可能会有更多的全局类(或使用它的调用方类)能够更好地决定它是否可以继续

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

根据我所阅读的内容(在本文末尾)Martin说,这两件事都很好——快速失败、提供有意义的异常和“缓慢失败”——让用户能够联系支持人员,继续完成无论出现何种异常都可以成功完成的任务

在这种情况下,批处理系统示例非常好-尽管批处理中的一项可能出现故障,但用户很可能希望处理其余的项,这就是为什么您抛出一个由全局处理程序捕获的异常(全局处理程序决定继续处理下一项并聚合错误,以便向用户显示错误并向开发团队发送通知)

通过这种方式,两者都完成了——大部分用户的工作都完成了,同时也启动了快速失败原则

所以这取决于您的具体情况——如果您的类参与其他操作,可能会有更多的全局类(或使用它的调用方类)能够更好地决定它是否可以继续

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