Le modèle dans un monde idéal ne devrait contenir que la logique métier, il modélise un objet réel tel qu'une maison. Cependant, dans presque toutes les circonstances, le modèle doit conserver ses données dans un certain stockage.
Les interactions entre le modèle et les données stockées peuvent se produire sur une couche de données distincte ou directement dans le modèle, ce qui est le cas lors de l'utilisation d'un ORM (Object Relational Mapper). En d'autres termes, le modèle se connecte directement à la base de données ou transmet ses données à un autre objet "d'accès aux données" qui se connecte à la base de données.
Un ORM (Object Relation Mapper) mappe les champs de la table de base de données aux attributs de votre objet modèle, fournissant des getters et setters. Dans ce cas, il n'y a pas de couche de données distincte et le modèle est directement responsable de la persistance de ses données.
Voici un exemple Ruby utilisant ActiveRecord
un ORM populaire:
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
est un champ de la houses
table qui est automatiquement détecté par ActiveRecord
lequel ajoute un getter et un setter à l'objet. Quandsave
est appelé, la valeur de l'attribut price est conservée dans la base de données.
De mon point de vue, le pro d'avoir une couche de données est que vous obtenez un point dans lequel vous pouvez manipuler les données avant qu'elles n'atteignent le modèle, le modèle a moins d'inquiétude, il a moins de responsabilités. Par exemple, vous devrez peut-être combiner des données provenant de plusieurs sources de données non compatibles, c'est quelque chose qu'un ORM ne peut pas facilement gérer.
Le principal inconvénient est que c'est une autre couche d'abstraction à gérer, si vous n'en avez pas besoin, ne vous embêtez pas, restez simple. Moins de pièces mobiles, moins de problèmes.
I'm not using the database as a simple object store
. Je suppose que cela signifie une certaine logique métier dans la base de données, sous la forme de procédures stockées. En théorie, cela va à l'encontre de MVC, mais dans la pratique, cela n'a pas d'importance.