Как стать автором
Обновить
4
0

Пользователь

Отправить сообщение
Мне кажется, вы говорите про загрузку по требованию, а MetaDone про ленивую инъекцию.

Ленивая инъекция невозможна по умолчанию, т.к. обычно она работает через наследование.

ну, в итоге вы практически процитировали мои сообщения выше, рад, что мы поняли друг друга.

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

Я сейчас не рассматриваю битриксо-подобные системы, где реквайр на реквайре сидит и инклудом погоняет.

и вот именно за него предлагается бить линейкой по рукам

Если вы про эти глобалы, то да, без них в принципе никуда. Я думал, что речь идет про использование global

Это не походит на описание «небольшой скрипт». Это уже сайт, в него впиливается доп. функционал.

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

Да даже если вам надо накидать отдельный алгоритм, то в рамках однофайлового скрипта вам не нужны глобалы.

За последние 5 лет работы мне вообще не приходилось их использовать, что в больших проектах, что в малых
Если скрипт небольшой, то зачем там глобалы?
Тут ключевой вопрос будет простой — вы все проекты делаете в одиночку? Помните все переменные, которые можно и нужно хранить в глобалах?
А если у вас есть водоплавающие птицы? космические? Проблема с instanceof легко решается тем, что создается некий ArrangmentResolver с методом ArrangementResolver::getArrangement, возвращающий Arrangement с методом Arrange(Bird* aBird) для необходимого класса птиц.

Да, больше сложности, зато более SOLIDно, т.к. нам больше не придется модифицировать этот метод при появлении новых видов птиц.
Релизный цикл симфони — 2 года, перед выпуском нового мажора выпускают лтс для предыдущей версии. при этом этот LTS находится в «пограничном» состоянии, т.е. в нем обычно работает старый функционал, но кидается депрекейтами и уже работает новый функционал. в x.0 депрекейты выпиливают.

Т.е. «ломать все» как раз таки необязательно, без проблем пишутся библиотеки, которые поддерживают "~2.7 || ~3.0", а потом, думаю и "~2.7 || ~3.0 || ~4.0".
Либо я что-то не понимаю сам, либо не понимаю вас. В прокси классах юзается отдельная фабрика, в которую отдельно передаются EM и метаданные

https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Proxy/ProxyFactory.php#L124

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

to implement ActiveRecord functionality on top of the persistence-ignorance that Doctrine propagates

https://github.com/doctrine/common/blob/2.4/lib/Doctrine/Common/Persistence/ObjectManagerAware.php#L29
Ну, тогда это уже привет data mapper, но идею понял, спасибо
Ну насколько я понимаю, суть претензии выше в том, что для того, чтобы интегрировать внешний код в Yii, приходится как раз таки эти обертки, прослойки и коннекторы реализовывать, просто чтобы подключить библиотеку. В симфони в принципе достаточно только описать класс для DI, а с версии 3.3 уже иногда и это можно не делать (для простых случаев).
Я правильно понимаю, что берется сторонний класс, для него делается репозитрий, который наследуется от AR? Но в таком случае разве репозиторий не будет возвращать инстансы самого репозитория вместо модели? или надо будет писать кастомную инстанциацию объектов?
ну, магический — это не совсем «соответствующий приватному свойству». Например, если оперировать терминами той же доктрины, то в свойствах связей toMany лежит обычно Collection, а геттер отдает массив для того, чтобы нельзя было эту коллекцию мутировать.

ясно, спасибо
В смысле внутренние и почему калечить? Это «изкоробочное» решение, на основе которого можно сделать свои методы активных моделей через какой-нибудь трейт

Но самому пользоваться еще не доводилось.
Так этот факт не меняется вне зависимости от используемого фреймворка. Писать независимые компоненты сложнее, чем завязанные на другой код.


Вот это совсем неправда. Вам говорят о том, что сложно писать модули в Yii, не привязанные к Yii. А не вообще к любому коду.

В симфони очень легко пишется независимая библиотека, к которой рядом (сверху) кладется бандл, семантическая конфигурация и расширение для DI. За примерами далеко ходить не надо — JmsSerializer + JmsSerializerBundle, DoctrineOrm + DoctrineBundle и тд. Делается очень просто все.
Эта возможность, кстати заложена в доктрине из коробки :)

Тем не менее такой подход гораздо удобней, так как не накладывает никаких ограничений на цепочку наследования. Можно сделать ModelTrait и внедрять его везде где очень хочется
А можно пример? Это какие то отдельные валидаторы? или работает через магический геттер? Потому что в коде по ссылке выше идет прямое обращение к атрибуту
Ну я это написал к тому, что не завязывать модели на актив-рекорд не получится. Кстати доктрина позволяет организовать ActiveRecord-like работу

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность