apropriado repetir dados em modelos para satisfazer o uso da lei do deímetro em coleçõe
Este é um exemplo artificial, digamos que quero listar a população de um país em que uma pessoa tem um amigo, aqui estão duas configurações abaixo. Seria melhor repetir os dados nos modelos?
Me disseram que oLei de Demeter é importante seguir, o exemplo é que você diz a um cachorro para passear, é loucura ordenar que suas pernas ande
a minha inexperiência (noob), descobri que a consulta seria muito mais fácil quando os modelos repetem os dadoPeople.where(:country => friend.country)
vs coleções nas quais existem associações encadeadas (que até agora eram impossíveis):People.where(:city => { :county => { :region => { :country => friend.city.county.region.country }}})
(Ajudaria realmente este noob aqui a entender o conceito, se você pudesse imaginar a configuração e a sintaxe correta de LoD, espero realmente não ter usado um exemplo que não tenha nada a ver com a Lei de Demeter). Tentei aplicar LoD viadelegate
e me disseram que ainda estou encadeando (o que sou), a única solução em que posso pensar é repetir dados que podem ser acessíveis por meio de associaçõe
Mas eu odeio repetir dados! Isso se deve ao fato de seguir o tutuorial do DHH no Rails, onde recriamos o twitter, ele mostrou como é bom criar relacionamentos versus repetir dado
s dados repetidos devem ser adequados para deixar as associações menos encadeada
Modelos, repetindo dados
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
odelos VS com associações encadead
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