merlin-vrn
@merlin-vrn

Почему разработчики так безаппеляционно утверждают, что один фронт-контроллер лучше?

Итак, цитата из документации. Они утверждают:
A much better solution is to use a front controller: a single PHP file that handles every request coming into your application.




Аргументируя это тем, что-де каждый файл должен выполнять одни и те же действия для инициализации: подключать библиотеки и так далее:

There are several problems with this approach, including the inflexibility of the URLs (what if you wanted to change blog.php to news.php without breaking all of your links?) and the fact that each file must manually include some set of core files so that security, database connections and the «look» of the site can remain consistent.




Через пол-страницы они предлагают использовать mod_rewrite для украшения урлов:

Using Apache's mod_rewrite (or equivalent with other web servers), the URLs can easily be cleaned up to be just /, /contact and /blog.




Итак, предлагается свернуть разные пути в один, а потом снова, уже на PHP, их различать и обрабатывать по-разному.



А ведь я мог сделать три файла /index.php, /contact/index.php и /blog/index.php и получить то же самое, зато по сравнению с подходом Symfony я:

  • свалил бы всю маршрутизацию на веб-сервер — мне вообще не придётся делать её на PHP, дополнительно она стала бы быстрее
  • не стал бы настраивать рерайтер, который неудобен в настройке, кроме того, тоже скорости не добавляет
  • смог бы легко без лишних условных конструкций пропускать для отдельных точек входа необязательные шаги, например, анализ строки параметров запроса для статических страниц
  • отдельные модули, представленные в данном случае в виде отдельных точек входа, оказались бы связаны слабее, что означает, что взаимное влияние меньше, проще адаптация, обновление и т. д.


    это то, что сообразил навскидку.



    То есть, я использую больше давно проверенного и более простого кода, а получаю в общем то же самое.



    При этом, гибкость не уменьшается. Нет никакой разницы, каким именно способом я настраиваю урлы: в магическом файлике добавляю магические строки, или же создаю директории и в них кладу магические файлики. Если мне нужно сменить урлы так, чтобы старые работали, никто не мешает мне для решения этой ненормальной задачи всё-таки задействовать рерайтер.



    По поводу «одинаковой иницизацизации» я тоже не согласен с аргументами: в этих ваших единых контроллерах всё равно приходится использовать магию типа «включение библиотек, анализ запроса, вывод ответа». Чем это отличается от строки «включить стандартную инициализацию» в отдельных точках входа?



    Я думаю, вопрос на самом деле касается не только Symfony — ведь все так делают — от Joomla до Dokuwiki. Объясните, чем это один фронт-контроллер настолько лучше, что используют его, несмотря на очевидные преимущества отдельных точек входа?
  • Вопрос задан
  • 4361 просмотр
Пригласить эксперта
Ответы на вопрос 2
Anonym
@Anonym
Программирую немного )
С одной точкой входа можно не париться по поводу маршрутизации вообще. Вы добавляете новый маршрут в конфиг и заворачиваете его на нужный контроллер. Всё. При грамотной автозагрузке, вам не надо заморачиваться по поводу того, какие классы нужны для этого конкретного контроллера. Когда количество маршрутов приближается к сотне, начинаешь понимать, что так значительно проще.
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
/blog выглядит более приятно, чем /blog/index.php и скрывает детали реализации + есть ещё динамический роутинг, когда вы заранее можете не знать, какой URL придет, и нужно сначала будет поискать в БД или ещё где-то.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы