El modelo en un mundo ideal solo debe contener lógica de negocios, modela algún objeto real como una casa. Sin embargo, en casi todas las circunstancias, el modelo necesita conservar sus datos en algún almacenamiento.
Las interacciones entre el modelo y los datos almacenados pueden suceder en una capa de datos separada o directamente en el modelo, que es el caso cuando se usa un ORM (Object Relational Mapper). En otras palabras, el modelo se conecta directamente a la base de datos o pasa sus datos a algún otro objeto de "acceso a datos" que se conecta a la base de datos.
Un ORM (Object Relation Mapper) asigna campos en la tabla de la base de datos a los atributos de su objeto modelo, proporcionando captadores y definidores. En este caso, no hay una capa de datos separada y el modelo es directamente responsable de conservar sus datos.
Aquí hay un ejemplo de Ruby que usa ActiveRecord
un ORM popular:
class House < ActiveRecord::Base
end
house = House.new
house.price = 120000
house.save
Price
es un campo en la houses
tabla que se detecta automáticamente mediante el ActiveRecord
cual agrega un captador y definidor al objeto. Cuandosave
se llama, el valor del atributo de precio se conserva en la base de datos.
Desde mi punto de vista, la ventaja de tener una capa de datos es que obtienes un punto en el que puedes manipular los datos antes de que lleguen al modelo, el modelo tiene menos de qué preocuparse, tiene menos responsabilidades. Por ejemplo, es posible que necesite combinar datos de varias fuentes de datos no compatibles, esto es algo que un ORM no puede manejar fácilmente.
La principal desventaja es su otra capa de abstracción para administrar, si no la necesita, no se moleste, manténgala simple. Menos partes móviles, menos errores.
I'm not using the database as a simple object store
. Supongo que eso significa algo de lógica empresarial en la base de datos, en forma de procedimientos almacenados. En teoría eso va en contra de MVC, pero en la práctica no importa.I want the data in the DB to have a life and meaning beyond the application.
¿Qué?