O modelo em um mundo ideal deve conter apenas lógica de negócios, ele modela algum objeto real, como uma Casa. No entanto, em quase todas as circunstâncias, o modelo precisa manter seus dados em algum armazenamento.
As interações entre o modelo e os dados armazenados podem ocorrer em uma camada de dados separada ou diretamente no modelo, como é o caso ao usar um ORM (Object Relational Mapper). Em outras palavras, o modelo se conecta diretamente ao banco de dados ou passa seus dados para algum outro objeto de "acesso a dados" que se conecta ao banco de dados.
Um ORM (Mapeador de Relação de Objeto) mapeia os campos na tabela do banco de dados para os atributos do seu objeto de modelo, fornecendo getters e setters. Nesse caso, não há camada de dados separada e o modelo é diretamente responsável pela persistência de seus dados.
Aqui está um exemplo de Ruby usando ActiveRecord
um ORM popular:
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
é um campo na houses
tabela que é automaticamente detectado pelo ActiveRecord
qual adiciona um getter e um setter ao objeto. Quando save
é chamado, o valor do atributo price é mantido no banco de dados.
Do meu ponto de vista, o profissional de ter uma camada de dados é que você obtém um ponto no qual pode manipular os dados antes que eles cheguem ao modelo, o modelo tem menos com o que se preocupar, tem menos responsabilidades. Por exemplo, pode ser necessário combinar dados de várias fontes de dados não compatíveis, isso é algo que um ORM não pode manipular facilmente.
O principal argumento é sua outra camada de abstração para gerenciar, se você não precisar, não se incomode, mantenha-o simples. Menos peças móveis, menos para dar errado.
I'm not using the database as a simple object store
. Suponho que isso signifique alguma lógica de negócios no banco de dados, na forma de procedimentos armazenados. Na teoria, isso vai contra o MVC, mas na prática isso não importa.