Почему контейнер Symfony продуман лучше, чем велосипеды на анонимных функциях

keltanas

marty cats
Ты мешаешь параметры и компоненты в одну кучу. Даже в yii они разделены.
это не что иное, как передача параметра (числа, строки...). Сервис передается просто через его имя.

и я предлагаю это делать через лямбды вместо магических констант ->register('rpc', 'RPC')->addArgument('%rpc.transport%');
и это будет шаг назад в удобстве использования и отладки приложения.

Если для симфони-контейнера можно выполнить getServiceIds() и получить список соответсвия алиасов и классов, то в твоем случае этого не следать, т.к. везде вместо сервисов одни лямды. Как раз получишь имнно такой контейнер, котый все ругают за неюзабельность.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
getServiceIds() - да, это аргумент против.
однако, в yii такого нет, я ни разу не встречал у кого-либо желания в приложении или в тестах написать yii::app()->getComponents() и пройтись по нему foreach-ем в поисках соответствия классов сервисам, так что
это будет шаг назад в удобстве, контейнер, котый все ругают за неюзабельность.
- просто слова пока что.
Приведи, пожалуйста, пример обоснованной ругани такого подхода. IMHO не интересует совершенно.

Наоборот, не знать имя класса, который реализует сервис, не просто удобно, в этом суть полиморфизма и IoC - основных принципов проектирования. Я могу определять сервисы динамически, а для тестов - подменять объекты налету.
А если я захочу это сделать - что мешает мне написать get_class(yii::app()->session) ?
 
Последнее редактирование:

keltanas

marty cats
однако, в yii такого нет, никто не пытается взять yii::app()->getComponents() и пройтись по нему foreach-ем в поисках соответствия классов сервисам
так очень плохо.
Я не представляю, как вообще можно отлаживать такое приложение не ругаясь матом.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
keltanas твои комментарии очень ценны, так что я их выношу в соответствующий раздел
 

AmdY

Пью пиво
Команда форума
Ты мешаешь параметры и компоненты в одну кучу
Все остальное, что ты хочешь нахардкодить с помощью лямд, уже реализовано под капотом контейнера
ИМХО, это два самых ценных комментария в теме. Параметры нужны для порождения и конфигурирования кмпоненты.
Я в pimple добавляю магический __call, где порождаю new $container['map'][$serviceName]($container). Зачем явно прописывать громоздкие лямбды, когда это можно делать автоматически по требованию на основании конфига.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
AmdY,
>Ты мешаешь параметры и компоненты в одну кучу
я просто не вижу смысла в сущности "параметр", отдельной от компонента, увижу - соглашусь

>Все остальное, что ты хочешь нахардкодить с помощью лямд, уже реализовано под капотом контейнера
моя цель - вытащить инициализацию из-под капота, сделать ее наглядной, избавиться от промежуточных абстракицй
 
Сверху