MVC с путаницей переднего контроллера

** упрощенный вопрос **

Я изучаю шаблоны oop, и я ищу для создания собственной простой инфраструктуры mvc. Я бы хотел, чтобы у этого был фронт-контроллер, но мне трудно найти какую-либо достоверную информацию для реализации переднего контроллера с MVC.

В частности, я смущен тем, должен ли фронт-контроллер запускать всю триаду или же контроллер фронтального вызова просто вызывает контроллер, а остальные – остальные.

Я заметил такие классы, как route, router и bootstrap, и мне интересно, что делают эти конкретные классы и зависят они от самого фронтального контроллера.

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

1) «Я изучаю шаблоны ООП»: паттерны настолько мощны, насколько опасны в неправильных руках. Я пытаюсь сказать, что вы должны начать строить свой fw, не пытаясь использовать все шаблоны, которые вы встречаете в сети, только потому, что они используются или обсуждаются большими. Вы можете реорганизовать свой код позже, предоставляя каждому шагу более высокий уровень абстракции: это, естественно, связано с использованием шаблонов, которые вы будете читать, и лучшего понимания их.

2) «запутался в том, должен ли фронт-контроллер инициировать всю триаду»: это зависит от того, какой уровень сцепления вы намерены иметь в своем mvc. У вас может быть ваш Front Controller, управляющий всем, как:

  1. bootstrap: загрузить конфигурацию и создать соединение с базой данных и т. д.
  2. request: получите необходимые данные, описывающие, что было предложено
  3. маршрут: обрабатывать запрос
  4. ответ: вернуть то, что было задано

Но что, если конфигурация нужна где-то еще? Может быть, в скрипте CLI? Естественно, вы отсоедините компонент бутстрапа от маршрутизатора, чтобы использовать его в другом месте. И то же самое для других компонентов.

3) «классы, такие как маршрут, маршрутизатор и бутстрап». Представьте, что ваш большой класс справляется со всем. Как вы будете тестировать свои методы? Будете ли вы вручную вызывать скрипт с разными входами? Будет ли каждый метод тестирования проверять вход, маршрутизацию и вывод сразу? Обеспечение уровня абстракции для каждого компонента, входящего в ваш Front Controller, который инкапсулирует его в соответствующий класс / объект / модуль, даст вам гораздо лучшие возможности тестирования.

Я говорю, потому что я был до этого, прежде чем создавать именно то, о чем вы говорите: https://github.com/OverKiller/PHP-Router

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

Вы должны сделать то же самое. Я пытаюсь сказать следующее: не пытайтесь создать следующую Ultimate SymZendCakeIgniter PHP Framework все сразу. Не торопитесь, не спешите читать и не спешите учиться. И ради бога: * даже перед чтением чего-либо о шаблонах дизайна получите хорошую книгу о ТЕСТИРОВАНИИ

Надеюсь, я был полезен.