В MVC 1 модель 1 таблица или 1 модель несколько таблиц? - PullRequest
5 голосов
/ 21 июня 2009

В MVC 1 модель 1 стол или 1 модель несколько столов?

Я создаю приложение, которое содержит 3 таблицы. Я не знаю, следует ли мне создать одну модель для всех 3 таблиц или создать 3 модели для 3 таблиц.

В случае, если я использую 3 модели для 3 таблиц, куда мне поместить код, если я хочу объединить эти 3 таблицы? Поставить код в любую из 3 моделей?

Есть предложения?

Ответы [ 2 ]

6 голосов
/ 21 июня 2009

Как правило, часть «Модель» в MVC должна интерпретироваться как «Модель представления» или «Модель представления», то есть класс, который инкапсулирует все данные и поведение, необходимые для представления. Это может или не может быть эквивалентно модели предметной области.

Доменные модели должны быть разработаны, чтобы быть независимыми от пользовательского интерфейса. Это означает, что такие модели не должны быть загрязнены специфическими для пользовательского интерфейса данными и поведением, например, при определении, включена ли конкретная кнопка или нет.

Возможно, вы также захотите показывать одни и те же доменные объекты в нескольких разных видах (например, «Мастер / детализация» или «Отображение / редактирование»), и, если эти виды достаточно различаются, будет полезно иметь модель вида для каждого вида.

Таким образом, в общем случае вы должны разрабатывать свой уровень домена и уровень представления независимо.

На уровне домена вы можете выбрать модель трех таблиц в виде трех классов. В книгах, таких как Шаблоны архитектуры корпоративных приложений * Фаулера * и доменно-ориентированный дизайн Эванса , содержится много рекомендаций о том, как моделировать реляционные данные как доменные модели.

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

Таким образом, вы можете обеспечить разделение задач, и ваши классы будут следовать принципу единой ответственности.

Для очень простых сценариев может иметь смысл объединить Модель предметной области и Модель представления в один слой, но вы должны понимать, что по сути это означает, что в решении отсутствует Модель предметной области - все модели будут чистыми Модели представления.

4 голосов
/ 21 июня 2009

Обычно вы создаете одну модель для каждой таблицы, так что в вашем случае это означает, что вам нужно 3 модели. Когда я говорю «Модель», я имею в виду класс, который будет представлять одну строку (обычно) в одной таблице.

например: Таблицы:

  1. Продукты
  2. Заказы
  3. Пользователи

в таком случае наиболее простым и простым является создание 3 различных классов (которые представляют модель данных приложения), где первый класс представляет отдельный продукт, следующий представляет заказ, а последний класс представляет одного клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...