YiiFramework Опасность в архитектуре yii Active Record

fixxxer

К.О.
Партнер клуба
что его ошибка делает программистов опытными
ты передергиваешь мне кажется :)
судя по тем наметкам архитектуры yii2, которые я видел, они прекрасно понимают сделанные в yii1 ошибки
 

grigori

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

можно указать, что именно мой патч ломает, а не считать себя пророком :)
хотя, нифига он там не ломает, просто кривые мозги

НО я заставил их оторвать задницы и заняться проблемой, а это уже неплохой результат
 

fixxxer

К.О.
Партнер клуба
Я все равно считаю правильным фиксом final constructor.

onAfterConstruct там я вижу. Для внутренних целей можно завести свой недокументированный protected вызов с пометкой "не трогать" в phpdoc - полез во внутренности - сам виноват.

То есть, я понимаю про BC и что в 1.1.х так нельзя, но уже в каком-нибудь 1.2 это можно исправить именно так.

P.S. Кто там спрашивал, зачем нужен final? ;)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ты передергиваешь мне кажется :)
ну, смотри:
>The problem is at line 387 in CActiveRecord . It creates an instance of the model class.
это декларация static function model(). Модели создаются фабрикой Post::model()
Проблема вообще в другом месте: она в function getMetaData() - строка 403

>Creating an infinite recursion is very easy.
Общее утверждение, классика. Он просто передергивает, уводя обсуждение на другую тему.

>There are more ugly programming issues that can take weeks to find out the root cause.
Второе утверждение не по теме.

>the experience dealing with these issues (проблема - его код в getMetaData()) makes a developer more experienced
А вот это уже по теме.

Да ладно - судя по коментам, они только в доку пунктик добавят... Т_Т
учитывая, что добавление пункта в доку - процесс очень сложный и занимает несколько месяцев, это уже немало
 

Ragazzo

TDD interested
fixxxer
я думаю 1.2 если и будет то все равно будет BC. Да еще, Yii2 поскольку сейчас только Кьенг пишет, то у Григория будут проблемы с Yii2 наверное :D там будет все не так)) just joke)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ragazzo учитывая, как они хотят сделать $model->asArray()->findAll() - однозначно "не так".
Получается, что у одного метода объекта разные типы результата в зависимости от контекста вызова, нестабильный API, нарушение идей банды 4х.

Любой, кто писал на java, скажет, что лучше $model->findAll()->asArray() - пусть findAll() вернет коллекцию.
Впрочем, я это сам скоро сделаю в 1й версии. Пока выйдет 2ка - рак на горе свиснет.
 

fixxxer

К.О.
Партнер клуба
Ну ведь правда makes a developer more experienced, разве нет? :D

#define true false тоже makes a developer more experienced =)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
fixxxer почему $%^ за счет моего пятничного вечера? :)
 

Ragazzo

TDD interested
grigori
ну команда значительно увеличилась и у тех кого приняли есть же доступ к yii2, но хз, у всех же есть основная работа, дела, etc) Не, я не писал на ява, но когда делал "облегченную" read-only AR как слой для взаимодействия между модулями то делал именно так :D Ну т.е.
PHP:
Users::finder()
    ->fields()
    ->asArray(true)
    ....
    ->fetchAll();
 

fixxxer

К.О.
Партнер клуба
Ragazzo учитывая, как они хотят сделать $model->asArray()->findAll() - однозначно "не так".
Получается, что у одного метода объекта разные типы результата в зависимости от контекста вызова, нестабильный API, нарушение идей банды 4х.

Любой, кто писал на java, скажет, что лучше $model->findAll()->asArray() - пусть findAll() вернет коллекцию.
Впрочем, я это сам скоро сделаю в 1й версии. Пока выйдет 2ка - рак на горе свиснет.
Оптимизация, чтобы не создавать collection, который нужен только для asArray().
Необходимость оптимизации спорна, но если уж определились, что она нужна, я бы сделал, чтобы работали оба варианта.
 

Ragazzo

TDD interested
fixxxer
там нестолько "оптимизация" для yii2/1, сколько "как правильно разрулить потом скоупы и кучу всяких ->with('somerel')->findAll()"
 

Ragazzo

TDD interested
fixxxer
ну судя по тому как это пытались хоть как-то сделать(но безуспешно) через behavior/extenstion в 1ой версии и насколько пристально тот же Кьенг этому уделял внимание во 2ой, то самое непосредственное. Там же все идет через билдеры/etc, и все это правильно состыковать еще надо :S
P.S. это я про сам Yii, а не про ветку Григория.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
fixxxer Им просто так хочется. То, что нестабильность API вылезет проблемами - гарантировано.
 

Ragazzo

TDD interested
grigori
дак ты витоге что решил? Giny vs Yii1, или как ты его позиционируешь? :)
 

grigori

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

fixxxer

К.О.
Партнер клуба
Ragazzo
думаю, он позиционирует это как форк Yii1, сделанный для решения собственных проблем, которым не жалко поделиться с общественностью
не более того
 
Сверху