YiiFramework Yii PHP framework 2 public preview

MiksIr

miksir@home:~$
Я вот тут посмотрел AR. А можете пояснить на пальцах, в чем плюсы разделения AR на AR+AQuery? Вот минусы с точки зрения использования - вижу, это и проблемы с автокомплитом, и излишняя магичность скоупов. Просто разделили, так как слишком много ответственности? Ну AR вообще весь такой. Тот же Фаулер гвоорит, что не видит причин выносить методы поиска в отдельный файндер из AR.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
MiksIr, совершенно лень как-бы расписывать тут логику, причем довольно сложную, только чтобы подставиться под холивар с переходом на личности - после такой формы постановки вопроса
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
если учесть, что ответ знают примерно 5 человек в мире - спрашивай у кого-нибудь, ага,

впрочем, может Саша захочет ответить, хз, но я бы его спрашивал иначе
 

MiksIr

miksir@home:~$
MiksIr, совершенно лень как-бы расписывать тут логику
если учесть, что ответ знают примерно 5 человек в мире
Ну как бы очень скромно, да.
Те делать нечего? Не будет ответа, так не будет. Не переживай за меня.
 

MiksIr

miksir@home:~$
А вопрос именно тут (на этом форуме), ибо мне кажется, что я помню тему, где обсуждался AR именно в этом ключе, т.е. что файндер в AR - недостаток, и его нужно вынимать. Вот мне и интересно вспомнить, в чем тут дело. Только в том, что класс толстый получился, или еще в чем-то.
 

fixxxer

К.О.
Партнер клуба
Я могу предположить, что для абстракции от структуры AR-модели, навязываемой SQL, и избыточной для документного стораджа. Хотя я бы обошелся трейтами.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
fixxxer, трейты были отвергнуты году сначала потому что min 5.4 ставить, как я предлагал, не хотели - типа, мы вот-вот альфу выкатим к зиме, а когда по факту прошло 2 года и этой осенью требования подняли до 5.4 - менять архитектуру уже поздно,
а во-вторых кагбэ потому что их нельзя параметризовать как поведения
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Я делаю псевдопараметризацию трейтов через интерфейсы и объявленные через @method геттеры, которые должен реализовать использующий трейты класс.
Но, конечно, generic-ов не хватает.
 

Gas

может по одной?
После того как объявили о 5.4, то зарефакторили AR и вынесли часть логики в трейты
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
понятно, что выкрутиться можно, но классы ядра должны быть быстрыми и понятными, а параметризация через геттеры - это не совсем здравая идея для API популярного фреймворка :)

Gas, на самом деле причины разделять AR и finder были, и в данном случае трейты были бы таки костылем, а не решением
 

fixxxer

К.О.
Партнер клуба
Это спорный вопрос, что проще - явно указанные в @method-комментариях и явно вызываемые геттеры, или __call-магия. Оба варианта по сути workaround-ы ввиду отсутствия templates/generics
 

MiksIr

miksir@home:~$
После того как объявили о 5.4, то зарефакторили AR и вынесли часть логики в трейты
Из ActiveQuery правда. Может это только этап, и потом эти трейты в AR уедут.

Я могу предположить, что для абстракции от структуры AR-модели, навязываемой SQL, и избыточной для документного стораджа. Хотя я бы обошелся трейтами.
В смысле, что бы этот AR можно было бы под noSQL подпихнуть? Почему бы тогда просто не разделить на два слоя наследованием - базовое, а слоем выше - для реляционных. С чем работаем, от того и наследуем модель.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
в данном случае не делали ни магию, ни геттеры, а разделили логику на разные независимые сущности
 

fixxxer

К.О.
Партнер клуба
Делегирование гибче наследования, а так тоже вариант.
 

MiksIr

miksir@home:~$
понятно, что выкрутиться можно, но классы ядра должны быть быстрыми и понятными, а параметризация через геттеры - это не совсем здравая идея для API популярного фреймворка
А запихнуть скоупы статикой в модель, а потом вызывать их магией через объект ActiveQuery - это как?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
это ... холивар на тему, к которой я не имею ни малейшего отношения :)
любовь к статике и внутренняя связанность через хардкодинг классов - это, считай, такая фича великого кормчего
 

fixxxer

К.О.
Партнер клуба
Я если честно вообще в код не смотрел, я рассуждаю исходя из имен классов. :)

В моем понимании здравая архитектура при таком разделении - это когда модель изнутри делает new ActiveQuery, инициализирует своей структурой, получает результат и грузит в себя. Хотя это получается похоже на table gateway, только с иным разделением :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
в том и суть - в yii никакой не AR, и не table gateway, а пришей кобыле хвост,
то есть конструкция с одной стороны удобная, а с другой в рамки паттернов нифига не укладывающаяся
 

MiksIr

miksir@home:~$
Я если честно вообще в код не смотрел, я рассуждаю исходя из имен классов. :)

В моем понимании здравая архитектура при таком разделении - это когда модель изнутри делает new ActiveQuery, инициализирует своей структурой, получает результат и грузит в себя. Хотя это получается похоже на table gateway, только с иным разделением :)
В Yii модель в статическом методе создает AQ, и отдает ее, и дальше уже мы все методы включая итоговый find вызываем у AQ, а тот уже возвращает модели. Так как AQ создана статикой - у нее нет объекта AR. Благодаря этому и со скоупами фигня - они вроде как должны быть в AR, как часть бизнес-логики, а вызываются у AQ.
 
Сверху