Eu estava discutindo com um amigo sobre um aspecto de uma aplicação que estamos desenvolvendo, e então entramos num embate. Esta é a situação: a aplicação possui lojas, e uma das informações que as lojas possuem é o endereço. Eu sugeri que as lojas possuam um modelo/tabela para a loja, sendo que esse modelo/tabela se relaciona com um outro modelo/tabela para o endereço. Esse modelo/tabela para o endereço, por sua vez, se relaciona com alguns outros modelos/tabelas, como um modelo/tabela para as cidades e para os estados. Uma das vantagens que eu vejo nessa abordagem é que pelo fato do endereço ter vida própria, ele pode se relacionar com as lojas, como também pode se relacionar com outras entidades da aplicação.
Já este meu amigo, sugeriu colocar o endereço da loja no modelo/tabela da loja, ou seja, tudo ficaria concentrado no mesmo modelo/tabela. Eu achei essa opção ruim, já que ao meu ver é anêmica, uma vez que a o model da loja estaria representando muitos conceitos simultaneamente, resultando em uma classe com diversas métodos e validações não muito relacionados, além de testes bem gordos. Ao argumentar contra a idéia, ele disse que essa é a melhor opção por ser mais simples e performática. De fato é a mais simples, ou melhor, é a mais simplória. Já em relação a performance ela realmente é ligeiramente melhor, uma vez que evita consultas a outras tabelas, o que é amenizado pelo lazy loading no caso da minha sugestão.
Enfim, eu acredito que estou certo quando ao meu ponto de vista. Acho que é incabível colocar a informação do endereço no mesmo model/tabela que as informações mais gerais da loja. De início até achei que ele estava sugerindo que o model/tabela dos endereços centralizasse as informações dos endereços, e que esse se relacionasse com o modelo das lojas, o que eu acho mais razoável, embora ainda prefira a opção de ter um model/tabela pra cada informação.
Acontece que esse meu amigo é um bom desenvoveldor, o que me fez ficar na dúvida se não sou eu que estou sendo formal demais. Sendo assim, gostaria da opinião dos demais usuários do GUJ.
