Design patterns 空对象模式是否使调试更加复杂?

Design patterns 空对象模式是否使调试更加复杂?,design-patterns,null,null-object-pattern,Design Patterns,Null,Null Object Pattern,我想知道在某些情况下,空对象模式是否会使调试变得更加困难。例如,如果一个方法返回一个“空”对象而不是null,那么它不会抛出错误。就可靠、干净的代码而言,这很好,但这难道不意味着现在使用的是一个空对象,它基本上不做任何可能导致意外错误的事情吗。现在没有任何东西可以帮助程序员找到问题,而不是使用空异常 可以,因为如果null对象必须返回一个值(如示例中所示),那么您只是推迟了null问题,仍然需要检查null值 我发现null对象非常有用,因为满足两个条件 您只调用没有返回值的方法 当没有价值的时

我想知道在某些情况下,空对象模式是否会使调试变得更加困难。例如,如果一个方法返回一个“空”对象而不是null,那么它不会抛出错误。就可靠、干净的代码而言,这很好,但这难道不意味着现在使用的是一个空对象,它基本上不做任何可能导致意外错误的事情吗。现在没有任何东西可以帮助程序员找到问题,而不是使用空异常

可以,因为如果null对象必须返回一个值(如示例中所示),那么您只是推迟了null问题,仍然需要检查null值

我发现null对象非常有用,因为满足两个条件

  • 您只调用没有返回值的方法
  • 当没有价值的时候,你不应该忽视行动
  • 一个简单的例子是回调

    class Callback {
       void onDoSomething(SomeArg someArg);
    }
    
    通常,在使用回调之前,必须进行空检查

    if (callback != null) {
        callback.onDoSomething(someArg);
    }
    
    使用空对象模式,您可以使回调的默认值为空对象,并避免代码其余部分中的空检查。锅炉铭牌代码越少,就越容易看到重要部件

    @BCartolo某些语言(如Ruby)null是一个对象,您可以在其上调用
    nil?
    method。如果您的语言不支持这一点,您可以在设计中将null表示为对象,并确保引用从不为null。