FrontController vs Router — взаимозаменяемы?

В продолжение разработки своего велосипеда, пришел к выводу:
FrontController и Router — взаимозаменяемы? По сути, FrontController — устаревший вид организации MVC архитектуры, когда парсится URI и подключаются файлы в зависимости от имени первого элемента массива, к примеру /news/ подключит NewsController.
Учитывая PSR-4, FrontController больше не актуален, т.к. Router позволяет задать правила для роутинга вручную, что более безопасно, гибко, лучше контролируется и легко отключаются необходимые разделы сайта.

Изучая данный вопрос и проектируя свое первое приложение, я пришел к выводу что FrontController не нужен, т.к. его работу можно положить на Router. Я прав или на этапе проектирования упустил какой-то функционал, который должен выполнять FrontController?
  • Вопрос задан
  • 1112 просмотров
Пригласить эксперта
Ответы на вопрос 4
muhammad_97
@muhammad_97
PHP-разработчик
Это две разные вещи. Front Controller не имеет никакого отношения к роутингу. Это паттерн, суть которого в том, что вы имеете единую точку входа (например, index.php), а не кучу отдельных файлов. Роутинг - связывание URL и соответствующего обработчика. Т.е. и вариант с контроллером, название которого совпадает с URL - это тоже роутинг (например, example.com/controller/action), но этот вариант уже устарел.

Учитывая PSR-4, FrontController больше не актуален

Самый интересный момент. А как эти два понятия вообще связаны между собой?
Ответ написан
@djay
Если реально хочешь разобратся в теме, то тебе придётся глубоко вкурить мануал

Ну а так начем с того, что Router - это компонент Front Controller. Это его состовная часть. По порядку:

1. Задача роутера - словить текущий URI и просмотреть имется ли он в карте маршрутов
2. Задача Dispatcher'a (ну Dispatcher - это тоже компонет Front Controller"а) - вызвать ассоцированный контроллер к словленному URI

В реализации Front Controller'a должен создаватся роутер и диспетчер, и все это должно вызыватся там. Если твоя реализация Front Controller'a отлавливает (или реализует, а не вызыват) роуты, то это значит что ты нарушаешь принцип SRP.
Ответ написан
trevoga_su
@trevoga_su
да забей ты уже на эту терминологию. это не истина в последней инстанции. не надо тупо копировать все - начиная с архитектуры и кончая названиями.

motherfucker.png
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Кратко:
1. FrontController - для SPA (работа через RESTfull API)
2. Router - для страничных запросов (обычный сайт)
3. https://en.wikipedia.org/wiki/HATEOAS
Почитайте и выберите в зависимости от реализуемого Вами функционала.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы