2

我经常发现自己做了大量的委派工作。

Ruby Science中,它说:

同一对象的许多委托方法表明您的对象图可能无法准确反映它们所代表的现实世界关系。

如果您发现自己编写了很多委托,请考虑更改消费者类以获取不同的对象。例如,如果您需要将大量User方法委托给Account,则代码引用User可能实际上应该引用 的实例 Account

我真的不明白这一点。什么是这在实践中的例子?

4

1 回答 1

0

我认为那一章的作者想澄清一下,例如,写:

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

很好的例子,但还有更多。

于 2013-11-22T22:18:32.663 回答