Правильный дизайн проекта MVC [закрыт]
-
06-07-2019 - |
Вопрос
Я использую Kohana уже пару месяцев и все еще относительно новичок в стиле MVC организации вашего кода / презентации / уровня базы данных.К сожалению, хотя существует множество документации о том, как создать контроллер, установить представление и взаимодействовать с базой данных с помощью модели, я не нашел много ресурсов, которые имеют дело с чистыми и предлагаемыми шаблонами разработки.
Позвольте мне привести краткий пример:
В моем последнем проекте есть один контроллер, потому что я не уверен, стоит ли мне создавать гораздо больше ... или когда мне следует создать новый.Как точно мне определить, когда нужен новый контроллер, а также когда нужна новая модель?
Решение
Я бы посоветовал вам взглянуть на ресурсоориентированная архитектура, во-первых.Это не даст вам никаких прямых указаний о том, как организовать ваш код.Однако, если мыслить с точки зрения ресурсов, жизнь становится проще, когда дело доходит до принятия решения о том, создавать новый контроллер или нет.Как только вам удается идентифицировать ресурс в вашей системе, обычно полезно создать для него модель плюс контроллер - хотя это всего лишь эмпирическое правило.
Некоторые дополнительные моменты:
- найдите ресурсы и создайте модель и контроллер для каждого из них (эмпирическое правило).
- не бойтесь создавать модели для ресурсов, которые не сохраняются
- думайте о контроллерах как о "водопроводе" или "проводке" пользователя к бизнес-домену - их роль заключается в обработке запросов пользователей и пересылке им ответа обратно - держите их как можно более тонкими
Другие советы
Правило большого пальца следующее: когда я идентифицирую новый вид " item " что мое приложение. нужно управлять, я задаю себе эти вопросы:
(1) Должны ли предметы такого рода быть постоянными?
(2) Будет ли много экземпляров этого предмета?
Если ответ на оба вопроса положительный, я прихожу к выводу, что указанный элемент должен быть моделью (или элементом модели, или классом домена, в зависимости от терминологии вашей инфраструктуры MVC). Когда я определяю новый элемент модели, я также определяю для него контроллер, который будет поддерживать четыре основные операции: создание, получение, обновление, удаление (вполне вероятно, что ваша структура может сгенерировать для вас контроллер по умолчанию).
Возможно, вы захотите получить копию «Шаблонов архитектуры корпоративных приложений» Мартина Фаулера. В разделе «Веб-презентация» подробно рассказывается о том, как структурировать ваш код при использовании инфраструктуры, управляемой Front Controller, как и любая другая волна сред MVC.
Мне нравятся небольшие контроллеры с четко определенной функцией или набором функций. Обычно это означает один контроллер на страницу (или набор похожих страниц). На моем сайте Kohana CSSMySite у меня есть о блогах, контактах, css и пост-контроллерах. Р>
Все о контроллере это установить шаблон. Контроллер блога взаимодействует с моделью блога, чтобы вывести несколько сообщений из базы данных. Контроллер записей взаимодействует с моделью блога для отображения одного сообщения из базы данных. Р>
Каждый раз, когда у меня есть данные, которые являются постоянными (сообщения в блоге) или используются несколько раз (список состояний для раскрывающегося списка), они попадают в модель. Доступ к моделям может осуществляться различными контроллерами, поэтому не требуется однозначного отображения модели в контроллер.
Возможно, хороший способ научиться хорошему программированию MVC - это провести некоторое время в Ruby-on-Rails. Я начал использовать рельсы некоторое время назад, и, как косвенный результат, я считаю, что теперь у меня очень хорошее понимание MVC. Я рассматриваю рельсы как воплощение MVC. По крайней мере, это может быть интересным способом изучения MVC ... что ты подумаешь?
Вот пример того, что я делал в своем приложении Kohana.
Мне нужен раздел «последние новости», поэтому я настроил контроллер, модель и просмотр под названием «новости».
В моем контроллере новостей были методы index()
, feed()
и media_releases()
.
Моя модель состояла из запросов базы данных, которые получают мои новости из базы данных MySQL.
И на мой взгляд, это просто много HTML с некоторыми <?php echo $title; ?>
и тому подобное.
Есть ли причина, по которой вы не можете определить общие системы, которые работают глобально, изменяя метаданные базы данных? Мне кажется, что вообще написание какого-либо кода для доступа к простым данным и их отображения является ненужной избыточностью.