Гнездиться или не гнездиться? Контроллеры MVC (CodeIgniter)

Предыстория:

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

У меня есть веб-приложение, которое следует этой схеме URL:

  • / - основной индекс
  • /static-page - статические страницы
  • /categories - индекс для определенных категорий
  • /categories/users - индекс для пользователей определенных категорий
  • /categories/users/id#/user-name - конкретный пользователь для определенных категорий
  • /categories/event-type-A указатель событий, относящихся к определенным категориям
  • /categories/event-type-A/id#/event-name - конкретное событие для определенных категорий
  • /categories/event-type-B указатель событий, относящихся к определенным категориям
  • /categories/event-type-B/id#/event-name - конкретное событие для определенных категорий

*Примечание. Эта структура URL-адреса аналогична структуре StackOverflow в том смысле, что неправильно сформированные URL-адреса (неправильные event-names) автоматически исправляются, если существует id#.

Вопрос:

Поскольку categories, users и event-type имеют уникальные функции, связанные с ними (например, редактирование пользователей, управление событиями и т. д.), все они являются собственными контроллерами (правильно?). А поскольку event-type-A и event-type-B очень похожи, они имеют общую функциональность, расширенную от класса events.

Как вы предлагаете мне организовать свои контроллеры таким образом, чтобы они следовали «стандартной практике» в дизайне ООП и MVC?

В настоящее время у меня есть класс Pages для моих статических страниц, и я ожидал, что будет класс categories, который вызывает класс users, классы event-type-A и event-type-B, которые (как описано выше) являются расширениями класса events... но отсюда я м не знаю, как лучше поступить.

Мы будем очень признательны за любые примеры простого/псевдокода.

Дополнительная информация:

К вашему сведению: я использую PHP/MySQL. Я пытался изучить MVC, написав свой собственный фреймворк, но недавно переключился на CodeIgniter. При этом будет достаточно либо специального решения CodeIgniter, либо общего решения MVC.

Обновление:

Как указано ниже Ako , я определенно мог бы объединить events в один контроллер, а затем создать из него два type. Я просто не понимаю, как я на самом деле настроил каждый из контроллеров (какие методы определить и т. д.), чтобы заставить их работать вместе правильно.


person ServAce85    schedule 01.05.2012    source источник


Ответы (2)


Похоже, что этот ответ предлагает удовлетворительное решение.

По сути:

Используйте HMVC для загрузки необходимых триад MVC, когда это необходимо.

Я никогда раньше не слышал о HMVC, но, по-видимому, это позволит мне указать, когда вызываются определенные триады MVC, что в конечном итоге даст мне контроль над тем, когда вызываются разные контроллеры. Это позволит каждому из разделов (categories, events, types и т. д.) действовать как независимые модули, которые имеют свои собственные index страницы, которые можно вызывать, но также могут предложить возможность обслуживать гораздо более сложные данные по мере необходимости.

person ServAce85    schedule 09.05.2012

Как насчет замены /categories/event-type-A и /categories/event-type-B на /categories/events/type? Где type может быть одним из A или B (или что-то в этом роде)?

person Omid Kamangar    schedule 01.05.2012
comment
Простое предпочтение. Большую часть кода для event-type-A и event-type-B можно использовать повторно, но не весь. Таким образом, я не хочу, чтобы они были указаны как дочерние элементы events, я бы предпочел, чтобы они были отдельными (в основном для целей SEO). Спасибо за предложение, однако .... если нет простого способа добиться этого с помощью вашего метода, скрывая при этом каталог events из пути. - person ServAce85; 01.05.2012
comment
Предположим, что я продолжаю и следую вашему предложению создать контроллеры, соответствующие схеме /categories/events/type/id#/event-name, как мне определить свои контроллеры, чтобы это работало? Я предполагаю, что у вас есть контроллеры для categories, events, types, но, как описано в вопросе, я не понимаю, как правильно настроить методы, чтобы это работало. Можете ли вы провести меня через процесс? - person ServAce85; 02.05.2012