Est-il approprié de répéter des données dans les modèles pour satisfaire en utilisant la loi de Demeter dans les collections?

StackOverflow https://stackoverflow.com/questions/6404354

  •  29-10-2019
  •  | 
  •  

Question

Ceci est un exemple artificiel, disons que je veux énumérer la population d'un pays dans lequel une personne a un ami, voici deux configurations ci-dessous. Serait-il préférable de répéter des données dans les modèles?

On m'a dit que le Loi de Demeter est important à suivre, l'exemple est que vous dites à un chien de marcher, c'est la folie de commander ses jambes pour marcher.

Dans ma richesse d'inexpérience (noob), j'ai constaté que la requête serait beaucoup plus facile à faire lorsque les modèles répètent les données, People.where(:country => friend.country), vs collections où il y a des associations enchaînées (qui ont été impossibles jusqu'à présent): People.where(:city => { :county => { :region => { :country => friend.city.county.region.country }}}) (Cela aiderait vraiment ce noob ici à comprendre le concept si vous pouviez imaginer la configuration et la syntaxe de LOD correctement conçues, j'espère vraiment que je n'ai pas utilisé un exemple qui n'a rien à voir avec la loi de Demeter) J'ai essayé d'appliquer LOD passant par delegate Et on m'a dit que je suis toujours en train de chaîner (ce que je suis), la seule solution à laquelle je peux penser est de répéter des données qui pourraient être accessibles via des associations.

Mais je déteste répéter les données! Cela est dû à la suite de Rails Tutuorial de DHH où nous recréons Twitter, il a montré à quel point il est génial de créer des relations par rapport aux données répétitives.

La répétition des données devrait-elle être appropriée pour obtenir les associations moins enchaînées?

Modèles, répétitif de données

class Country < ActiveRecord::Base    
  has_many :regions    
  has_many :counties    
  has_many :cities    
  has_many :people
end

class Region < ActiveRecord::Base
  has_one :country
  has_many :counties
  has_many :cities    
  has_many :people
end

class County < ActiveRecord::Base
  has_one :country
  has_one :region
  has_many :cities    
  has_many :people
end

class City < ActiveRecord::Base
  has_one :country
  has_one :region
  has_one :county    
  has_many :people
end

class Person < ActiveRecord::Base
  has_one :country
  has_one :region
  has_one :county    
  has_one :city
  has_many :relationships
  has_many :friends, :through => :relationships
end

vs modèles avec des associations enchaînées

class Country < ActiveRecord::Base    
  has_many :regions   
end

class Region < ActiveRecord::Base
  belongs_to :country
  has_many :counties
end

class County < ActiveRecord::Base
  belongs_to :region
  has_many :cities
end

class City < ActiveRecord::Base
  belongs_to :county
end

class Person < ActiveRecord::Base
  belongs_to :city
end

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top