Il modello in un mondo ideale dovrebbe contenere solo una logica aziendale, modella un oggetto reale come una Casa. Tuttavia, in quasi tutte le circostanze, il modello deve conservare i propri dati in alcuni archivi.
Le interazioni tra il modello e i dati memorizzati possono avvenire su un livello dati separato o direttamente nel modello, come nel caso di un ORM (Object Relational Mapper). In altre parole, il modello si collega direttamente al database o passa i suoi dati ad un altro oggetto di "accesso ai dati" che si collega al database.
Un ORM (Object Relation Mapper) associa i campi nella tabella del database agli attributi dell'oggetto modello, fornendo getter e setter. In questo caso non esiste un livello dati separato e il modello è direttamente responsabile della persistenza dei dati.
Ecco un esempio di Ruby che utilizza ActiveRecord
un ORM popolare:
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
è un campo nella houses
tabella che viene automaticamente rilevato dal ActiveRecord
quale aggiunge un getter e setter all'oggetto. quandosave
viene chiamato, il valore dell'attributo price viene mantenuto nel database.
Dal mio punto di vista, il pro di avere un livello dati è che puoi ottenere un punto in cui puoi manipolare i dati prima che arrivino al modello, il modello ha meno preoccupazioni, ha meno responsabilità. Ad esempio potrebbe essere necessario combinare i dati provenienti da diverse origini dati non compatibili, questo è qualcosa che un ORM non può gestire facilmente.
L'aspetto principale è che è un altro livello di astrazione da gestire, se non ne hai bisogno, non preoccuparti, mantienilo semplice. Meno parti in movimento, meno errori.
I'm not using the database as a simple object store
. Immagino che ciò significhi una logica di business nel database, sotto forma di procedure memorizzate. In teoria ciò va contro MVC, ma in pratica non importa.