Я предлагаю вам сначала взглянуть на ресурсо-ориентированную архитектуру . Это не даст вам никаких прямых указаний по организации вашего кода. Однако если думать о ресурсах, жизнь становится проще, когда дело доходит до принятия решения о создании нового контроллера. Как только вам удается идентифицировать ресурс в вашей системе, обычно полезно создать модель плюс контроллер для него - хотя это всего лишь практическое правило.
Некоторые дополнительные моменты:
Простое правило выглядит следующим образом: когда я определяю новый тип «элемента», то мое приложение. необходимо управлять, я задаю себе следующие вопросы:
(1) Должны ли предметы такого рода быть постоянными?
(2) Будет ли много экземпляров этого предмета?
Если ответ на оба вопроса вопросы положительный. Я прихожу к выводу, что указанный элемент должен быть моделью (или элементом модели или классом предметной области, в зависимости от терминологии вашей структуры MVC). Когда я определяю новый элемент модели, я также определяю для него контроллер, который будет поддерживать четыре основные операции: создание, получение, обновление, удаление (вполне вероятно, что ваша структура может сгенерировать для вас контроллер по умолчанию).
Возможно, вы захотите получить копию «Паттернов архитектуры корпоративных приложений» Мартина Фаулера. В разделе «Веб-презентация» подробно рассказывается о том, как структурировать код при использовании фреймворка, управляемого фронтальным контроллером, как и любой из нынешних фреймворков MVC.
Мне нравятся небольшие контроллеры с четко определенной функцией или набором функций. Обычно это означает один контроллер на страницу (или набор похожих страниц). На моем сайте Kohana CSSMySite у меня есть контроллеры about, blog, contact, css и post.
Все о контроллере - это установка шаблона. Контроллер блога взаимодействует с моделью блога, чтобы вывести несколько сообщений из базы данных. Контроллер постов взаимодействует с моделью блога для отображения одного поста из базы данных.
Каждый раз, когда у меня есть данные, которые являются постоянными (сообщения в блогах) или используются несколько раз (список состояний для раскрывающегося списка), они входят в модель. К моделям могут обращаться разные контроллеры, поэтому не обязательно должно быть однозначное сопоставление модели с контроллером.
Вот пример того, что я делал в своем приложении Kohana.
Мне нужен был раздел «последние новости», поэтому я установил вверх контроллер, модель и представление под названием «новости».
У моего контроллера новостей были методы index ()
, feed ()
и media_releases ()
.
Моя модель состояла из запросов к базе данных, которые получают мои данные новостей из базы данных MySQL.
И мое представление - это просто много HTML с некоторым Php echo $ title; ?>
и т.п.
Есть ли причина, по которой вы не можете определить универсальную систему, которая работает глобально с присвоением метаданных базы данных? Мне кажется, что написание любого кода для доступа и отображения простых данных является ненужной избыточностью.
Возможно, хороший способ выучить хорошее программирование MVC - провести некоторое время в Ruby-on-Rails. Я начал использовать рельсы некоторое время назад, и в качестве косвенного результата я считаю, что у меня сейчас очень хорошее понимание MVC. Я вижу рельсы как воплощение MVC. По крайней мере, это может быть забавный путь, изучая MVC ... Что ты подумаешь?