). Это правильно?

адуманный пример, скажем, я хочу перечислить население страны, в которой у человека есть друг, вот две схемы ниже. Будет ли лучше повторить данные в моделях?

Мне сказали, чтоЗакон Деметры важно следовать, например, вы говорите собаке ходить, глупо приказывать ногам ходить.

В моем богатстве неопытности (нуб) я обнаружил, что запрос будет гораздо проще выполнить, когда модели повторяют данные,People.where(:country => friend.country)vs коллекции, в которых есть цепочечные ассоциации (которые до сих пор были невозможны):People.where(:city => { :county => { :region => { :country => friend.city.county.region.country }}}) (Это действительно помогло бы этому новичку понять концепцию, если бы вы могли представить правильную надуманную настройку и синтаксис LoD, я действительно надеюсь, что не использовал пример, который не имеет ничего общего с Законом Деметры) Я попытался применить LoD черезdelegate и мне сказали, что я все еще в цепочке (что я и есть), единственное решение, о котором я могу думать, - это повторять данные, которые могут быть доступны через ассоциации.

Но я ненавижу повторять данные! Это связано с тем, что после того, как мы создали реферат в Твиттере в DHH, он показал, как здорово создавать отношения против повторяющихся данных.

Должны ли повторяющиеся данные быть уместными, чтобы ассоциации были менее скованы?

Модели, повторяющие данные

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

против моделей с цепными ассоциациями

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

Ответы на вопрос(3)

Ваш ответ на вопрос