Вопрос

Я использую 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; ?> и тому подобное.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top