A
точно хотите знать?))
Дмитрий
если не самопис то да
A
Битриксовый)
Дмитрий
ух, но все равно имеет смысл погуглить "php-di bitrix router"
A
такого точно нет в гугле)
сами роуты в битриксе очень молодые)
еще никто не успел своей волосатой рукой поковырять их)
A
ладно, понял, спасибо) буду смотреть в сторону php-di
Дмитрий
как-то я хотел подключить sysmfony DI к примеру на чистом пхп, очень долго мучался, а php-di завелся с полпинка
Юра
Мне кажется проще использовать симфони микроыоеймворк чес писать с нуля
Юра
А то получится тоже самое почти только самописная сборная солянка какая-то
Дмитрий
Дмитрий
Наоборот
Иван
а что в симфе с консолью не так?
Иван
ну и обучение, по симфе материалы точно есть, а какие материалы по кастомной сборке?
Konstantin
сверху вреднейшие советы, советую от них держаться подальше
Дмитрий
Ну смотри, решил ты написал маленькую программу зачем тащить симфу если там даже работы с БД не будет
Дмитрий
A
кстати, а какие есть варианты реализации композиции (вариант ассоциации), с di ?
т.е. основная идея композиции, это то, что один объект будет владеть другим))
Иван
Дмитрий
A
так это уже не композиция)
A
это агрегация, когда зависимость создаётся вне класса
Юра
Создай в конструкторе )
Дмитрий
Понавыдумывают умных слов, пиши код блеать )
Юра
Понавнедряли тут зависимости
Дмитрий
Пока мы тут обсуждаем высокие материи Васян на Битриксе уже 16 тасок закрыл 😂
Юра
Небось не делал ресерч и ретроспективу
Дмитрий
@zatrofeemranoutrom я не про тебя )
Иван
A
Хочу понять одно:
когда нам нужна композиция (чтобы жизненным циклом зависимостей управлял клиентский класс).
вроде все понятно. создал в конструкторе зависимости и все гуд))
но с другой стороны, как тестить такой класс?
один из вариантов, которые приходят в голову, все-таки внедрять зависимости через конструктор, а в деструкторе из убивать.
но скорее всего, такой вариант не будет работать, т.к. сборщик мусора не будет убивать класс, если у него есть живые зависимости (ссылки на другие объекты), или будет?)
Nikolay
Nikolay
Дмитрий
Юра
Вообще не понимаю. Пишу себе и ниразу такие вопросы не возникали
Konstantin
Юра
В пхп рефкаунт гц
Павел
Хочу понять одно:
когда нам нужна композиция (чтобы жизненным циклом зависимостей управлял клиентский класс).
вроде все понятно. создал в конструкторе зависимости и все гуд))
но с другой стороны, как тестить такой класс?
один из вариантов, которые приходят в голову, все-таки внедрять зависимости через конструктор, а в деструкторе из убивать.
но скорее всего, такой вариант не будет работать, т.к. сборщик мусора не будет убивать класс, если у него есть живые зависимости (ссылки на другие объекты), или будет?)
Композиция нужна там, где ее тестить отдельно не надо. Например всякие OneToMany, VO и прочее
Павел
Ну и не надо заморачиваться
Павел
Надо прокинуть и менять - конструтор. Часть класса? Внутри
Юра
Пишешь в конструкторе иф тест, зэн мок класс
A
тогда, получается мы не может архитектурно создать такой класс, который удовлетворял одновременно этим двум критериям:
1. тестируемый код, и внедрение зависимости.
2. жизненный зависимостей, зависит от жизненного цикла зависимого класса.
?)
Nikolay
A
композиция)
class A {
function construct() {
$this->b = new B();
}
}
если класс А убили. В - тоже умирает.
Nikolay
Потому что композиция это часть чего то, а агрегация это отдельная часть и может существовать без другой
A
если я создают объект машины, который использует объекты двигателя и т.д.
то после удаления объекта машины должны удалиться все объекты (зависимости) (мотор, коробка передач, и т.д.)
Павел
Иван
Павел
Павел
Короче какое то словоблудие бессмысленное и беспощадное)
Nikolay
Nikolay
Какие цели преследуются
A
Цель одна:
Нужен объект A, для работы которого нужны другие объекты - Б и В.
Нужно сделать так, чтобы при удалении объекта A, удалились объекты Б и В, т.к. они самостоятельно не имеют смысла.
Если создать объект Б и В внутри конструктора А, то это решит задачу.
Но из-за того, что создание объектов зашили внутри конструктора, появились две другие проблемы:
1. Сложно тестировать объект Б. Не знаю, как подменять Б и В.
2. Нарушение принципа DIP. Нет возможности подменять подмены Б, на что-то другое, например на его подтип.
Nikolay
Цель одна:
Нужен объект A, для работы которого нужны другие объекты - Б и В.
Нужно сделать так, чтобы при удалении объекта A, удалились объекты Б и В, т.к. они самостоятельно не имеют смысла.
Если создать объект Б и В внутри конструктора А, то это решит задачу.
Но из-за того, что создание объектов зашили внутри конструктора, появились две другие проблемы:
1. Сложно тестировать объект Б. Не знаю, как подменять Б и В.
2. Нарушение принципа DIP. Нет возможности подменять подмены Б, на что-то другое, например на его подтип.
Зачем следить вручную что они удаляются
Konstantin
у кого-то слишком много свободного времени и некоторая перловка в голове 🙂
A
Утечка памяти, уже столкнулись.
Konstantin
не мешайте человеку упражняться в слабоумии
A
У нас консюмер на пхп крутится))
Konstantin
утечка памяти абсолютно не зависит от ДИ, божечки
Konstantin
у вас течет сервис, сделайте так, чтобы он не тек. не надо создавать на каждый "запрос" новый инстанс сервиса, а потом героически воевать с гц
Konstantin
просто запустите все сервисы при старте и обеспечьте отсутствие утечек в своем коде, вы занимаетесь черт знает чем, вместо решения реальной проблемы
Konstantin
делаете стейтлесс-приложение из стейтфул, да которое еще и течет
Павел
Юра
У тебя и так зависимость создаётся в контейнере и сразу передается в сервис. Кроме него никто больше от нее не зависит
Юра
Какая разница где ты её создал
Павел
Павел
Иван
Юра
Сделай просто зависимость shared false
Юра
А то она будет одна на всех
Павел
Память просто так не "течет". Сборщик мусора работает норм. Главное чтобы нигде что-то не собиралось
Konstantin
Да, но не к утечкам
к утечкам ведет исключительно жопоручие и неправильный подход к задаче
Konstantin
решать надо именно эту проблему, а не пытаться сообразить кривой воркэраунд вокруг