私は現在、デメテルの法則について学んでいますが、使用が実際に役立つ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
私が考えることができる唯一のことは、何らかの理由での名前をに変更したかったというpromos
ことです。次の変更を行うだけで済み、引き続き:find_by_promo_type
機能するため、解決策は役立ちますGame
class Game < ActiveRecord::Base
has_many :promos
delegate :find_by_promo_type, :to => :promos
end
唯一のことは、この議論には欠陥があると私は信じているということです。モデル名を変更する場合は、デメテルの法則にさえ違反しない他の多くの場所でコードをリファクタリングする必要があります。この例に関して、デメテルの法則が達成できるのはこれだけだとは信じがたいです。
誰かがこれを理解するのを手伝ってくれませんか。