2017-03-31 23 views
2

我想知道在某些情況下,null對象模式實際上是否會使調試更加困難。例如,如果一個方法返回一個「空」對象而不是null,那麼它不會拋出錯誤。這在可靠,乾淨的代碼方面很好,但是不能代表現在有一個空的對象被使用,基本上什麼都不會導致意外的錯誤。現在沒有任何東西可以幫助找到問題,而不是讓程序員指出問題。null對象模式是否會使調試更復雜?

+0

@BCartolo一些語言(例如Ruby)null是一個可以調用'nil?'方法的對象。如果你的語言不支持這個,你可以在你的設計中將null表示爲一個對象,並確保引用永遠不爲null。 – cyroxis

回答

2

是的它可以因爲如果你的空對象必須返回一個值(如你的例子),你只是推遲null問題,仍然需要檢查空值。

我發現空對象是非常有用的滿足兩個條件。

  1. 您只調用沒有返回值的方法。
  2. 當沒有價值時,你不能忽視行動。

A 簡單示例是回調。

class Callback { 
    void onDoSomething(SomeArg someArg); 
} 

通常你會使用回調

if (callback != null) { 
    callback.onDoSomething(someArg); 
} 

與空對象模式,你可以有回調的默認值是一個空對象之前做一個空檢查,避免無效檢查在你的其他代碼中。較少的鍋爐代碼使得查看重要部件變得更加容易。