Вопрос о шаблоне MVC - PullRequest
       39

Вопрос о шаблоне MVC

0 голосов
/ 05 февраля 2010

Я не совсем понимаю эту модель.

Из того, что я прочитал, похоже, что одна модель = одна таблица (если вы используете базу данных для хранения данных).

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

тогда я получил контроллер тегов и контроллер потоков, верно?

так что, если у меня есть таблица tags_threads_map для отношения многие ко многим.

если у меня есть модель tags_threads_map, например. в котором я получаю все темы, содержащие тег? у меня тоже должен быть контроллер tags_threads_map?

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

В большинстве уроков приведен простой пример 1: 1: 1.

Ответы [ 5 ]

4 голосов
/ 05 февраля 2010

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

Тем не менее, MVC не предписывает, что одна модель = одна таблица. Фактически модель может быть подкреплена несколькими таблицами или даже данными, происходящими из чего-то другого, чем реляционная база данных (например, веб-служба, плоские файлы, хранилище значений ключей или графическая база данных).

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

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

2 голосов
/ 05 февраля 2010

По моему мнению, лучше думать о модели как о модели типа объекта , а не об одной конкретной таблице.

Как правило, ваша инфраструктура MVC будет обрабатывать ваши отношения «многие ко многим» по определениям из моделей для тегов и потоков.

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

Похоже, это слишком общий вопрос, чтобы ответить на него, к вашему удовлетворению.

2 голосов
/ 05 февраля 2010

Таким образом, идея состоит не в том, чтобы «одна модель = одна таблица», а в том, что вы не хотите, чтобы код, управляющий данными , чередовался с кодом, управляющим операциями над данными * 1004. * или код, который обрабатывает взаимодействие с пользователем . Если у вас есть некоторый слой персистентности, который обрабатывает сопоставление объектов с базой данных, этого достаточно, чтобы иметь элементарную модель. Если у вас есть какой-то отдельный код, который выполняет алгоритмическую работу с этими данными, это контроллер. Если у вас есть способ визуализации данных для потребления пользователем, это представление.

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

1 голос
/ 05 февраля 2010

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

MVC довольно хорошо относится к 3d-играм, MVC не только для информационных систем. Учти это: В 3d графике модель - это карта, полигоны, их положение и цвета. Вид - это камера, с которой просматривается сцена, положение, масштаб и направление. Контроллер интерпретирует клавиатуру и мышь и управляет как камерой (вид), так и сценой (модель).

Если бы это была стрелялка, то если: Пользователь нажимает кнопку вперед, контроллер перемещает камеру вперед. Пользователь нажимает кнопку метания гранаты, контроллер добавляет гранату к сцене.

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

Как правило, вы помещаете все форматирование в представление, данные в моделях и логику в контроллеры.

1 голос
/ 05 февраля 2010

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

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