我经常发现自己做了大量的委派工作。
在Ruby Science中,它说:
同一对象的许多委托方法表明您的对象图可能无法准确反映它们所代表的现实世界关系。
和
如果您发现自己编写了很多委托,请考虑更改消费者类以获取不同的对象。例如,如果您需要将大量
User
方法委托给Account
,则代码引用User
可能实际上应该引用 的实例Account
。
我真的不明白这一点。什么是这在实践中的例子?
我经常发现自己做了大量的委派工作。
在Ruby Science中,它说:
同一对象的许多委托方法表明您的对象图可能无法准确反映它们所代表的现实世界关系。
和
如果您发现自己编写了很多委托,请考虑更改消费者类以获取不同的对象。例如,如果您需要将大量
User
方法委托给Account
,则代码引用User
可能实际上应该引用 的实例Account
。
我真的不明白这一点。什么是这在实践中的例子?
我认为那一章的作者想澄清一下,例如,写:
class User
def discounted_plan_price(discount_code)
coupon = Coupon.new(discount_code)
coupon.discount(account.plan.price)
end
end
注意account.plan.price
,可以通过delegate
在用户模型上使用来更好地完成,例如:
class User
delegate :discounted_plan_price, to: :account
end
它允许您编写以下内容:
class User
def discounted_plan_price(discount_code)
account.discounted_plan_price(discount_code)
end
end
class Account
def discounted_plan_price(discount_code)
coupon = Coupon.new(discount_code)
coupon.discount(plan.price)
end
end
请注意,我们写plan.price
,而不是account.plan.price
,感谢delegate
。
很好的例子,但还有更多。