什么是空对象模式?

时间:2014-06-20 00:05:37

标签: ruby

我认为null对象模式是一种减少重复代码的方法,用于检查nil或根据nil值执行某些操作。我的想法错了吗?

我使用null对象重构了这段代码:https://github.com/WithGJR/null。请告诉我是否有问题。

1 个答案:

答案 0 :(得分:3)

从您的示例中,所谓的Null Object概念是不在代码中使用Ruby nil,因为nil没有响应{{1}的方法} class。

如果是Subscription,则必须实施

nil

就像这样:

def price
   # this will generate a NoMethodError: undefined method `price' for nil:NilClass
   subscription.price
end

引入def price subscription.try(:price) || 0 # or if you don't use rails try method # subscription.nil? ? 0 : subscription.price end 可确保NullSubscription中的@subscription对象始终响应方法user.rbchargehas_mentoring?和这些方法总是返回一个正确的值(无论它是真实的price实例还是Subscriptoin实例)。因此,无论如何,您都可以直接致电NullSubscription

(感谢@FrederickCheung)如果您搜索subscription.pricemodule Null的Rails源代码,您可以找到此模式的一些示例。

在Rails应用程序中,人们倾向于使用Rails class Nulltry方法来处理nil对象。