MVC :: Что такое модель? - PullRequest
       5

MVC :: Что такое модель?

20 голосов
/ 19 ноября 2010

Я нахожусь в точке, где я должен принять решение о моделях.

Я знаю, что модели - это то, что вы используете для всех манипуляций с базой данных.

Но модели ограничены этим?

Под этим я подразумеваю.

Они предназначены только для взаимодействия с базой данных, Или они предназначены для всех внешних манипуляций с данными (например, данные из внешних API и т. Д.)?

Ответы [ 4 ]

17 голосов
/ 26 января 2011

Парадигма MVC - это шаблон проектирования, в котором вы организуете свое приложение со следующей структурой.

Модель: здесь вы должны хранить свою модель данных, алгоритмы.Например, если вы пишете приложение для работы с электронными таблицами, вы сохраняете структуру данных своей электронной таблицы.В вашей модели был бы механизм вычислений, у вас был бы код для сохранения и загрузки вашей электронной таблицы в вашу модель.Этот класс модели потенциально может быть повторно использован в других приложениях, например, если у вас есть код для сжатия данных.

Представление или представления: это часть вашего кода для визуализации данных (UI),для электронной таблицы у вас есть типичное представление электронной таблицы с ячейками от А1 до Z100 и т. д. Вы также можете визуализировать свои данные, используя представление диаграммы.И т. Д. Представление может быть повторно использовано в другом приложении, например, вы можете повторно использовать свое воображаемое представление диаграммы.

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

Если вы будете следовать этим рекомендациям, вы сможете изменить свою модель, например, перейти с модели, которая сохраняет файлы на диск, в модель.которые сохраняют файлы в облаке без изменения пользовательского интерфейса ... в теории.Вы также можете иметь возможность добавлять новые виды без изменения вашей модели.Вы также можете написать модульные тесты или регрессионные тесты для своих моделей.

Нет строгих правил, лучше всего руководствоваться здравым смыслом и собственным мнением.

9 голосов
/ 19 ноября 2010

Например, в Django модель - это класс, который сопоставляется с отношением данных (таблицей) и, возможно, связывает таблицы (например, для отношений многих ко многим).

В одном и том же классе могут быть методы для манипуляцийдля соответствующих данных могут существовать дополнительные классы, которые не определяют модели сами по себе, а представляют собой методы доступа и фильтрации данных.

Но термин модель в MVC действительно применяется для описания структур данных и методов доступаих вообще.

Каркасы могут несколько изгибать абстрактную терминологию.Например, то, что Django называет представлениями, фактически является функциями контроллера, а сущности, определяющие представление, называются шаблонами, а не представлениями.

7 голосов
/ 19 ноября 2010

Обновлено / переписано

Нет, они не ограничены только доступом к базе данных.

В приложении MVC M обычно является моделью вашего домена.Это означает, что он может инкапсулировать бизнес-логику и данные.Я бы посоветовал вам избежать модели анемичной области .Вы даже можете настроить свою модель так, чтобы она оставалась невежественной.Чтобы понять, что я имею в виду, взгляните на этот доклад по Создание моделей злого домена .

Со стороны View и Controller я бы рекомендовал всегда использовать так называемую модель представления,даже когда это похоже на отображение 1 к 1.Рано или поздно вы обнаружите, что модели на самом деле отличаются, и вы не хотите больше возлагать на View больше, чем просто переводить простую View Model непосредственно в HTML или другой формат рендеринга.

Задание Controllersзатем просто выполнить поведение в вашей модели и создать модели представлений для представлений.

2 голосов
/ 21 апреля 2018

Не связывайте модель только с базой данных. Думайте об этом как о представлении в памяти данных, которые вы используете в данный момент (поскольку данные, которые в данный момент не используются, могут находиться в БД, и когда вы обращаетесь к этим данным, сначала они попадают в модель, а затем распространяются на другие части приложения. .). Когда вы закончите с вашими манипуляциями с данными (что вы делаете в Model), вы либо сохраните их в базе данных для дальнейшего использования. Кроме того, Model - это первый класс, который получает данные, заполненные из БД, когда вы извлекаете данные из БД.

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