Основанная на компонентах структура в основном означает, что вы можете выбирать элементы системы, которую вы хотите, без необходимости рефакторинга этих отдельных элементов. Zend Framework является хорошим примером.
Как правило, наоборот - это фреймворк для пары, такой как CakePHP или RoR. В этих случаях гораздо сложнее развести и отдельный компонент, такой как Маршрутизатор или Контроллер, и использовать его вне стека этой платформы.
Как правило, вы хотите минимизировать жесткую связь, чтобы получить максимальную отдачу от повторного использования и иметь максимальную гибкость в плане замены компонентов или их модификации. Что мне часто не нравится в каркасах компонентов, так это то, что, хотя отдельные компоненты часто хорошо спроектированы и по умолчанию работают друг с другом, тонна времени разработки не тратится на автоматизацию совместного использования инструментов. Взять, к примеру, Zend Framework. БОЛЬШИЕ КОМПОНЕНТЫ, однако с 1.10 мы наконец-то видим достойный инструмент командной строки для автоматизации установки и инициализации модулей / контроллеров / представлений и т. Д. Там требуется определенный процесс / соглашение по начальной загрузке до 1.8, я думаю, что это было ... Для меня это один из самые важные части. Чем-то, что высоко ценится RoR, Django, Cake, Symfony, CodeIgniter и другими.