Если ты делаешь коробку, которую будут расширять другие, когда нужно заботиться о обратной совместимости и возможности безопасного апгрейда ядра, то это всё не помешает..
При любой разработке у меня до 40-60 процентов времени уходит на расширения существующей системы.
Чтобы код основной бизнес логики был проще.
В большинстве случаев эти расширения не нужны в будущем. Только для одного проекта. И в этом нет ничего страшного!
Постоянно кричат, убирайте дублирующий код. Раньше это было банально - создал функцию с дублирующим кодом. Продумал параметры.
Вот вам и рефакторинг.
Но многие на этом уровне и остановились.
Это подход процедурного программирования. Т.е. многие сейчас пишут на ООП фреймворках процедурным стилем.
Я же считаю, что расширение фреймворка под свою задачу - является рефакторингом. И является реальным ООП.
Например, если автору темы так нужно загружать коллекции коллекций - то написать Custom Walker наверное займёт меньше времени, чем отнял этот холивар.
Но я думаю, за что меня тут уже заклевали, что объекты вовсе не нужны.
Какая одна из главных фишек twig? Он писался явно с учётом программирования с php doctrine.
Без разницы вернёт вам доктрина коллекцию объектов или ассоциированный массив - в twig обращение и к тому и к тому одинаково.
Что будет, если в примере выше мы добавим для телефона поле description типа текст, и не перепишем все запросы подобного вида(коллекция клиентов, в каждом клиенте коллекция объектов телефонов)?
100 клиентов * 100 телефонов * 64 K(обычное текстовое поле) = 640 000 кб = 640 МБ озу
В объектах телефон - нужно, скорее всего при выборке коллекции клиентов - только поле телефон. Зачем грузить множество объектов телефонов? Это попросту может стать опасным.
Кстати, про конфиги, замени их php массивом с замыканиями возвращающие биллдер и получишь большую выразительность + 100500 к расширябельности, yml очень неудачный выбор. Хотя подобная система легко пищется без симфони и доктрины, на том же laravel есть
http://administrator.frozennode.com/docs/model-configuration#examples , он гораздо проще, так как является потомком версии писанной ещё во времена 3-й версии, но как демонстрация отсутствия ограничений вполне себе.
Откровенно говоря, я не вижу разницы между конфигом на xml, yml, php.
По поводу расширяемости - эту проблему решают Event Listener`ы.
Зато сам конфигурационный файл остаётся простым.
Т.е. логика делится на простую бизнес логику в конфиге и дополнительную магию в Event Listener.
И подобные конфиги, повторю, можно назвать компилируемыми языками. Поэтому не критично в каком виде они будут php, xml, yml, txt.