He visto múltiples configuraciones para la información persistente en la base de datos. En general, tres tipos de diseños parecen comunes en mi rincón del mundo:
- El controlador maneja la persistencia
- Modelo maneja la persistencia
- La biblioteca de terceros gestiona la persistencia, que generalmente requiere algún tipo de anotaciones en el modelo.
Me pregunto qué configuración (si existe) es, conceptualmente, la más fácil de usar / más compatible con una arquitectura MVC.
(Si no es uno que enumeré, proporcione un resumen / resumen rápido como parte de la respuesta)
Siendo realistas, MVC es principalmente un patrón de implementación de UI, por lo que la pregunta es algo discutible. Sin embargo, en realidad solo hay dos opciones de panorama general. Su controlador normalmente envía solicitudes para cargar o guardar entidades en su modelo utilizando 1) una capa de servicio de algún tipo o 2) el patrón de Registro Activo.
La capa de servicio puede adoptar cualquiera de varias formas, aunque mi preferencia personal es trabajar con una abstracción de repositorio para las entidades raíz agregadas, cuyas implementaciones concretas funcionarán con algún tipo de ORM, o un DAO liviano, o un API para alguna tienda no relacional si eso tiene sentido para la aplicación.
El patrón de registro activo significa que su modelo tiene la responsabilidad de la persistencia, aunque generalmente significa que una clase base de algún tipo administra las asignaciones a su tienda, por lo que su modelo no está realmente tan directamente involucrado.
Básicamente, el controlador envía solicitudes para persistir objetos, ya sea una llamada a su repositorio, su implementación de UnitOfWork o el método Save en sus entidades. Si está utilizando repositorios, sus objetos modelo ignoran la persistencia.
fuente
En un sistema MVC (model-view-controller), el modelo contiene los datos. Así que creo que la persistencia de la base de datos debería estar en ella.
fuente
La mayoría de las muestras de MVC de alto nivel que he visto tienen una
infrastructure
capa separada que tiene el código de implementación de la base de datos real (es decir, las llamadas específicas a NHibernate, EF o Linq o lo que sea su capa de datos), mientras que la capa "modelo" (a menudo también la capa "Dominio") tiene las interfaces que definen los servicios de datos.fuente
La práctica estándar en MVC es incluir la estructura de datos y la persistencia en la capa M (odel).
La capa del modelo no solo incluye las clases (POCO, etc.) que va a utilizar en su aplicación. Incluyen los repositorios para esas clases.
Un ejemplo sería un repositorio donde tiene grupos de instancias de clases de datos, es decir:
Podrá organizar mejor su dominio de modelo y también tendrá acceso a sus datos de muchas maneras, pero aún así la capa de datos / modelo será compacta y robusta
fuente