我目前正在学习delegate
德墨忒耳法则,我似乎找不到一个很好的例子来说明使用delegate
实际上是有用的。
我想找一个与我的项目相关的例子,因为我必须做一个演示。我发现可能违反得墨忒耳法则的唯一代码行如下:
@game.promotions.find_by_promo_type("cross")
该模型Game
has_many
Promotions
和它正在跨越另一个模型以执行find
基于促销属性的调用promo_type
。据我了解,这违反了得墨忒耳法则,我应该通过使用委托来解决这个问题:
class Game < ActiveRecord::Base
has_many :promotions
delegate :find_by_promo_type, :to => :promotion
end
你能给我一个例子,除了“得墨忒耳的法则是这样说的”之外,这实际上是有用的。
我唯一能想到的是,出于某种原因,我想将名称更改为promotions
to promos
,那么该解决方案将很有用,因为我只需要进行以下更改并且:find_by_promo_type
仍然适用于Game
class Game < ActiveRecord::Base
has_many :promos
delegate :find_by_promo_type, :to => :promos
end
唯一的问题是,我认为这个论点是有缺陷的。如果我要更改模型名称,我还必须在许多其他地方重构代码,甚至不违反得墨忒耳定律。很难相信这就是得墨忒耳法则在这个例子中所能完成的全部。
有人可以帮我理解这一点。