Attualmente sto imparando circa delegate
e la legge di Demeter. Comprendo la legge di Demeter, ma non riesco a trovare un buon esempio di dove usare delegate
per evitare di infrangere la legge sarebbe addirittura utile.
Voglio trovare un esempio correlato al mio progetto, dal momento che devo fare una presentazione. L'unica linea di codice che ho trovato potrebbe rompere la legge di Demeter è la seguente:
@game.promotions.find_by_promo_type("cross")
Il modello Game
has_many
Promotions
e sta raggiungendo un altro modello per eseguire una chiamata find
in base all'attributo promozioni promo_type
. Da quanto ho capito, questa è una violazione della legge di Demeter e dovrei implementare la seguente soluzione.
class Game < ActiveRecord::Base
has_many :promotions
delegate :find_by_promo_type, :to => :promotion
end
Puoi darmi un esempio in cui ciò sarebbe effettivamente utile oltre a "La legge di Demetra dice così".
L'unica cosa che posso pensare, è che per qualche motivo volevo cambiare il nome di promotions
in promos
, quindi la soluzione sarebbe utile perché avrei solo bisogno di fare la seguente modifica e :find_by_promo_type
funzionerà ancora per Game
class Game < ActiveRecord::Base
has_many :promos
delegate :find_by_promo_type, :to => :promos
end
L'unica cosa è, credo che questo argomento sia difettoso. Se dovessi cambiare il nome di un modello, dovrei anche reimpostare il codice in molti altri posti che non infrangono nemmeno la legge di Demeter. È difficile credere che tutto ciò che la Legge di Demetra può compiere riguardo a questo esempio.
Qualcuno può aiutarmi a capirlo.