Este me assombrou por tanto tempo. Ao fazer a programação MVC, o que você acha que é a melhor prática de programação? Deve-se usar modelos totalmente preenchidos ou parcialmente preenchidos, especialmente quando eu sei que, para esta tarefa em particular, vou precisar de apenas 2 campos do objeto de modelo que possui outros 5?
Às vezes, parece criminoso preencher uma lista de 20 objetos de modelo com todos os valores do banco de dados quando você sabe que precisará apenas de alguns deles.
Obviamente, modelo parcial significa que você precisará escrever mais um método no seu DAO além daquele que busca tudo. O que significa mais código para manter?
Por outro lado, extrair tudo do DB com modelos totalmente preenchidos significa que um método serve a todos, mas isso obviamente fornecerá uma sobrecarga de desempenho.
Eu posso ver o ORM (como o Hibernate ou o ActiveRecord of Rails) favorecendo tendências na programação MVC e bancos de dados como os modelos completos do BigTable do Google são aceitos. Mas e se você ainda estiver usando o bom e velho JDBC?
O hardware é barato, o desenvolvimento é caro. Isso é verdade mesmo quando o aplicativo precisa ser escalado para algumas centenas de milhares de solicitações por hora?
Respostas:
Você tem duas opções:
1) Deixe alguns campos no modelo não preenchidos
2) Crie um modelo "leve" extra para sua situação específica
Qual escolher depende das duas coisas novamente:
a) Quantos campos do modelo "completo" serão ignorados
b) Com que frequência esse modelo "leve" será instanciado
Se houver apenas alguns ou mais campos que podem ser preenchidos, não há problema em 1).
Se b) for apenas uma situação individual excepcional, talvez não faça sentido criar um modelo extra apenas para um caso de uso.
Outra abordagem é definir um modelo "leve" e herdar o modelo "completo" dele.
fonte
Se sua visualização precisar apenas de duas propriedades do modelo, você (provavelmente) terá o modelo errado para esse caso de uso! Gostaria de criar um modelo para se adequar à visualização, salvar as pesquisas extras de banco de dados e preencher apenas os dados necessários. Se uma visualização subseqüente precisar de mais detalhes, é necessário perguntar, obtenho os dados extras mais tarde ou devo obtê-los com antecedência ...
Como alternativa, você pode considerar algum tipo de avaliação preguiçosa; portanto, os valores são preenchidos quando você precisar deles. Isso pode funcionar bem, mas obviamente é mais trabalhoso e pode causar várias viagens de ida e volta ao banco de dados, o que não é ótimo se você acabar fazendo muito.
Dito isto, se você estiver basicamente selecionando alguns campos extras de uma tabela ou exibição, o custo de obter esses dados extras será zero, para todos os efeitos, para todos os efeitos (OK, há mais bytes no fio, mas os maiores custos provavelmente para criar e derrubar uma conexão); portanto, se houver uma chance de que você precise de alguns dados extras, provavelmente preencherei o modelo completamente quando estiver satisfeito com o modelo certo .
O hardware é barato, mas nenhuma quantidade de hardware pode fazer um projeto ruim funcionar bem.
fonte
O modelo não é um DAO.
E outra coisa: se você diz que possui 20 modelos (clientes, do seu exemplo), esse não é um modelo MVC. O modelo de domínio não é mapeado diretamente para uma única linha da tabela. Em vez disso, deve ser responsável por todas as operações realizadas com seus "clientes".
No seu exemplo, "Cliente" não é um modelo de domínio, mas apenas um objeto dentro do modelo.
Quanto à interação com o banco de dados, essa responsabilidade deve ser delegada a um objeto de mapeador de dados , que deve saber como armazenar e buscar suas instâncias da classe Customer.
fonte