Я видел несколько конфигураций для сохранения информации в базе данных. Как правило, три типа дизайна кажутся распространенными в моем уголке мира:
- Контроллер управляет постоянством
- Модель управляет постоянством
- Сторонняя библиотека управляет постоянством, обычно требуя какие-то аннотации к модели.
Мне интересно, какая конфигурация (если таковая имеется), концептуально, наиболее проста в использовании / наиболее совместима с архитектурой MVC?
(Если это не тот, который я перечислил, пожалуйста, дайте краткий план / обзор как часть ответа)
На самом деле, MVC - это в основном шаблон реализации пользовательского интерфейса, поэтому вопрос несколько спорный. Тем не менее, на самом деле есть только два варианта большой картинки. Ваш контроллер обычно отправляет запросы на загрузку или сохранение сущностей в вашей модели, используя либо 1) некоторый уровень обслуживания, либо 2) шаблон Active Record.
Уровень обслуживания может принимать любую из нескольких форм, хотя я лично предпочитаю работать с абстракцией репозитория для агрегированных корневых сущностей, конкретные реализации которых будут работать либо с каким-либо ORM, либо с облегченным DAO, либо с API для некоторого нереляционного хранилища, если это имеет смысл для приложения.
Шаблон Active Record означает, что ваша модель несет ответственность за постоянство, хотя обычно это означает, что некоторый базовый класс управляет отображениями в вашем магазине, поэтому ваша модель на самом деле не имеет такого непосредственного участия.
По сути, контроллер отправляет запросы на сохранение объектов, будь то вызов вашего репозитория, реализация UnitOfWork или метод Save для ваших объектов. Если вы используете репозитории, ваши объекты модели игнорируют постоянство.
источник
В системе MVC (модель-представление-контроллер) модель содержит данные. Поэтому я считаю, что в этом должно быть постоянство базы данных.
источник
Большинство высокоуровневых примеров MVC, которые я видел, имеют отдельный
infrastructure
уровень, который имеет реальный код реализации базы данных (то есть конкретные вызовы NHibernate, или EF или Linq или любой другой уровень данных), в то время как уровень «модель» (часто также уровень «Домен») имеет интерфейсы, которые определяют службы данных.источник
Стандартной практикой в MVC является включение структуры данных и персистентности в слой M (odel).
Слой модели включает в себя не только классы (POCO и т. Д.), Которые вы собираетесь использовать в своем приложении. Они включают в себя хранилища для этих классов.
Примером может служить репозиторий, в котором у вас есть наборы экземпляров классов данных, т.е.
Вы сможете лучше организовать свой домен модели, а также получить доступ к вашим данным многими способами, но слой данных / модели все равно будет компактным и надежным
источник