4

私は現在、デメテルの法則について学んでいますが、使用が実際に役立つ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

唯一のことは、この議論には欠陥があると私は信じているということです。モデル名を変更する場合は、デメテルの法則にさえ違反しない他の多くの場所でコードをリファクタリングする必要があります。この例に関して、デメテルの法則が達成できるのはこれだけだとは信じがたいです。

誰かがこれを理解するのを手伝ってくれませんか。

4

1 に答える 1