Проблема с дизайном базы данных для MVC-1 Таблица для модели

Мое самое большое препятствие с началом работы с инфраструктурой MVC связано с концепцией 1 модели с 1 базой данных. Для меня это слишком упрощенно и нереально для чего-либо, кроме простого приложения. Тем не менее, MVC используется повсюду, включая этот удивительный сайт StackOverflow. Как обычно, все примеры кода и руководства, с которыми я сталкиваюсь, очень просты, и отношения 1 к 1 прекрасно работают в этих случаях. Но то, что я ищу, представляет собой прочный реальный пример модели MVC, соединяющей таблицы. В случае stackoverflow я мог бы представить дизайн БД с таблицами, такими как "Вопросы", "Теги", "Пользователи" и т.д. В моем проекте БД у меня может быть таблица ссылок Question_Tag для поиска всех тегов, связанных с данным вопросом. Как MVC справляется с этим?

Ответ 1

Я не считаю, что есть что-то о шаблоне проектирования MVC, в котором говорится, что должна быть одна таблица базы данных для класса домена. На самом деле, нет ничего о шаблоне проектирования MVC, который даже говорит о том, что ваша модель должна быть или должна сохраняться в реляционной базе данных.

Это всего лишь стратегия, в которой используются некоторые популярные фреймворки (Ruby on Rails - возможно, ASP.NET MVC?), для чего, по-видимому, удобно. Но это не требование MVC. Spring MVC (для мира Java) не имеет неотъемлемой концепции того, как сопоставить компоненты модели с базой данных, на самом деле красота заключается в том, что ей все равно - вам просто нужно предоставить данные модели для использования и где вы получаете его из рамки MVC, не заботятся.

Иными словами, вам не нужно предполагать, что шаблон MVC означает, что вы должны использовать одну таблицу базы данных для одного компонента модели. Например, вам даже не нужно использовать базу данных, ваша модель может быть получена из плоского файла или веб-сервисов (и что отличное в MVC заключается в том, что, если вы правильно разрабатываете свое приложение, вы можете обменять различные реализации уровня данных в из вашего приложения и View или Controller даже не знают).

Ответ 2

Я думаю, вы сбиваете MVC с ORM. ORMS связывает вас один с другим с таблицами и объектами базы данных.

Что вам нужно сделать, это отправить объекты модели из вашего MVC в слой DAL, который может заполнить их из SQL-запросов и вернуть вам объекты. Аналогичным образом вы можете отправить населенные объекты с изменениями обратно на слой DAL, который будет сохранен.

Это гораздо более чистый и гибкий дизайн, который можно использовать с шаблоном MVC, и вам не нужно связывать свои объекты с таблицами базы данных, используя возможности соединения SQL.

Ответ 3

Хорошо, Ахмад имеет смысл. Но во всех примерах MVC, которые я видел, модель представляет собой комбинацию BLL/DAL. То, о чем вы говорите, поддерживает модель как чистый BLL и создает отдельный DAL. Я думал, что одной из главных особенностей использования существующей инфраструктуры mvc было ускорение разработки. Если мне нужно создать DAL поверх MVC, я могу также придерживаться существующего процесса разработки, отличного от MVC, для создания страниц с отдельными уровнями бизнес-логики и доступа к данным.