Почему мне не хочется использовать Yii?

Ragazzo

TDD interested
Absinthe
это лишь вопрос "вкуса", а хватает по сути и того что есть, остальное как заметили уже лишь перфекционизм. Вон в соседнем топике спорят про доктрину и как она там что обновляет, но ничего же, пользуются симфонисты ;)
 

Gas

может по одной?
И всё-таки, в моём понимании DiC даёт возможность декларативно описать какой объект должен быть создан при обращении к контейнеру по ключу (это в yii есть, с оговоркой наличия метода init() что не очень хорошо) и при этом декларативно описать какие зависимые объекты нужно создать и передать в конструктор (для простоты пусть так), причём рекурсивно (если эти зависимые ещё зависят от других) - этого в yii нет.

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

Всё упрощённо, но даже так yii::app()-> не выглядит DiC'ом, Service Locator'ом - да.
 

AmdY

Пью пиво
Команда форума
Sam Dark
В yii самый большой недостаток - наплевательское к досугу программистов, вкрутили бы DI, парсинг анотаций, ORM в стиле хибернейт, конфиги в джсоне или xml и вуаля, программист имеет кучу времени чтобы готовить себе кофе пока это всё парсится, собирается и кешируется.

Мне кажется у YII 2 основная задача - не стать symfony. Symfony хороша, но она нужна для определённого круга задач, зачем плодить уродцев типа ZF2.
 

Gas

может по одной?
:) Согласен полностью, кому нужен датамапер, пусть доктрину прикручивает, а AR в yii шикарный. Конфиги в xml - нет спасибо. Я лично ожидал в yii2 кроме неймспейсов наличие di-контейнера, ну нет так нет, прикручу сторонний.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ну и понаписали вы фигни
yii::app - это DI или IoC? явно заняться нечем

Sam Dark, есть у нас case, когда нужен DI: умный менеджер пула соединений

в AR захардкоден туповатый ConnectionBuilder, в котором захардкоден возврат CDBConnection (объект соединения, обертка над PDO),
а нам надо внедрить в эту конструкцию умный класс, который в зависимости от типа вызова (find/save), от статуса "в транзакции" и от еще чего-нибудь выдавал бы нужное соединение к мастеру или одному из слейвов,

Соедиение в yii генерится при инициализации модели, а нам надо генерацию CDBConnection откладывать до момента непосредственно вызова метода find/save,
так что вместо CDBConnection из ConnectionBuilder-а возвращаем не соединение, а объект пула соединений, который уже при вызове делегирует обработку запроса нужному соединению.
Вот тут нам нужен настоящий DI :)
 

keltanas

marty cats
Это к чему ошмёток кода? Пример контейнера из Symfony?
Это скорее, пример контейнера из Yii ;) То же, что Yii::app()->component

В Symfony объявляешь компонент, и в конструкторе указываешь, от каких интерфейсов он зависит. А в настройках IoC уже прописываешь конкретные сервисы, удовлетворяющие этим интерфейсам.
Для тестирования этому компоненту можно передавать Mock-объекты вместо реальных сервисов и получить вселенское счастье, и не зависеть во всех тестах от Yii::app() и прочего суперглобального контекста, если компонент хочет использовать другой компонент.
 

Ragazzo

TDD interested
Gas
Конфиги в xml - нет спасибо
так и должно быть, дело в том что это область DDD и infrastructure layer, чтобы максимально разделить domain layer от infrastructure, поэтому и repository такие :S просто не надо применять то что вам не нужно вот и вся проблема, а прочее это полный "оверинджинринг" :D
 

Sam Dark

Новичок
grigori
Думаю, DI в этом случае не поможет, если не допиливать всё остальное до отложенной инициализации коннекта.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, там пришлось много перепиливать

мы тут еще думаем типизированные плейсхолдеры Фаната встроить :) будет приколько
 

hell0w0rd

Продвинутый новичок
недостатки Yii - это, к примеру, вот, вот, отсутствие документации и захардкоденые имена классов,
а эта тема - понос
Второй недостаток - а свой фильтр нельзя написать? И юзать его?
А по поводу первого - вот эта магия yii, в этом весь yii и состоит(статика, магические методы). Из любой точки в любой момент можно обратиться к ядру, что хочешь с ним делать. Контроллеры не возвращают ответ, они его выдают.
Нет никакого процесса сборки приложения, хотя возможно это такая философия yii, которой я если честно не очень понимаю)
 
Сверху