Каковы преимущества и недостатки использования схему контроллера?

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

каковы преимущества и недостатки использования фронт-контроллера? Шаблон просто используется в рамках и CMSs, потому что неизвестно, какие страницы будут существовать в конечной системе?

4 ответов


у Шриканта есть хороший ответ. Однако я хотел бы подробнее остановиться на альтернативе. Предположим, у вас есть эта простая иерархия URL:

/gallery
/blog
/admin/login
/admin/newpost

если это реализовано с контроллерами страниц (PHP, например), оба gallery.php и blog.php нужно будет включить некоторые common.php в начале (или поблизости). Однако, оба login.php и newpost.php может включать в себя admin-common.php, который сам тянет в ' common.php 'и делает'/admin / ' -конкретную настройку, например, проверку пользователя опознанный.

в общем случае, если у вас есть иерархия URL-адресов, она выглядит как деревья наследования объектов. За исключением того, что вместо использования наследования на уровне языка вы наследуете среду whatever foo-common.php включить.

Я не могу себе представить, как передний контроллер увеличивает тестируемость, в конце концов, требуются те же самые тесты от автоматического http user-agent, независимо от реализации.

один главный недостаток страницы Контроллеры - это делает ваше веб-приложение зависимым от его среды размещения. Это также заставляет ваших разработчиков "видеть" ту же структуру, что и конечные пользователи, но я считаю, что это хорошо, учитывая количество сайтов, которые я вижу, которые имеют абсолютно ужасные url.


вот почему я никогда не буду использовать передний контроллер.

  • мы имеем совершенно хороший фронт контроллер его называется веб-браузером.
  • каждый http-запрос является уникальным и отдельным и должен рассматриваться как таковой.
  • невозможно масштабировать приложение с помощью фронтального контроллера.
  • Если вы разбиваете веб-приложение на небольшие модули, которые слабо связаны, его легче протестировать Блок / Модуль (вы не тестируете архитектура, а также контроллер, например) .
  • производительность лучше, если вы имеете дело с единственной просьбой однозначно.

шаблон переднего контроллера просто не подходит IMHO. Создавайте приложения почти так же, как UNIX, разбивайте большую проблему на небольшие блоки, которые выполняют одну задачу, и выполняйте эту задачу очень хорошо. Большинство фреймворков подталкивают разработчиков к использованию фронтальных контроллеров, и они просто ошибаются.


перефразируя статья Википедии о фронтальном контроллере:

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

более подробно:

контроллер фронт "обеспечивает централизованную точку входа для обработки запросов."Предположим, что передний контроллер для вашего веб-приложения index.php.

этот скрипт, index.на PHP будет обрабатывать все задачи, которые являются общими для всего приложения или рамки, как обработка сеанса, кэширование, фильтрация ввода. В зависимости от заданного ввода он будет создавать экземпляры дальнейших объектов и вызывать методы для обработки конкретной задачи.

альтернативой фронтальному контроллеру будут отдельные скрипты, такие как login.php и порядок.php, каждый из которых будет включать код или объекты, общие для всех задач. Это потребует повторения кода включения в каждом скрипте, но может также оставить больше места для конкретных потребностей скрипт.


одним из преимуществ использования переднего контроллера является его тестируемость. если вы используете TDD, намного проще протестировать контроллер, чем запрашивать много разных веб-сайтов.

добавлено позже : Том: причина, по которой я имею в виду, что она более тестируема, заключается в том, что вы обычно реализуете webhandlers как класс, а не серверные страницы. и тогда вы можете сделать много tetst непосредственно на занятия.