我认为null对象模式是一种减少重复代码的方法,用于检查nil
或根据nil
值执行某些操作。我的想法错了吗?
我使用null对象重构了这段代码:https://github.com/WithGJR/null。请告诉我是否有问题。
答案 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.rb
,charge
,has_mentoring?
和这些方法总是返回一个正确的值(无论它是真实的price
实例还是Subscriptoin
实例)。因此,无论如何,您都可以直接致电NullSubscription
。
(感谢@FrederickCheung)如果您搜索subscription.price
和module Null
的Rails源代码,您可以找到此模式的一些示例。
在Rails应用程序中,人们倾向于使用Rails class Null
和try
方法来处理nil对象。