[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Колупаем DI Container
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
chee
Цитата (twin @ 26.01.2021 - 16:15)
По крайней мере это на порядок проще, чем PHP DI

Увы но нет, попробовал сейчас PHP DI
$builder = new DI\ContainerBuilder();
$builder->addDefinitions([
'service' => \DI\create(TestEntryAsService::class),
'a' => \DI\create(TestEntryAsFactory::class)->constructor(\DI\get('service')),
]);

$container = $builder->build();

for ($i = 0; $i < 10; $i++) {
usleep(300);

$container->make('a')->test();
}

Работает как надо, по умолчанию get возвращает сервис, потому делается make, аналог твоему getNew. Но при этом внутри понятно как определить фабричную сущность, а как взять сервис и оно работает как надо и не течет.

Короче твой контейнер это поделка низкого качества, монструозный кусок кода, который течет, пыхтит и не может нормально покрыть типовые сценарии использования IoC-контейнера. Попросту мусор.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Не смеши людей. Это ты свою CMS обозвал типовым сценарием? Ржу в голос. Внедрение через публичные свойства, сервис-локатор, куча фабрик на любой малейший чих... Это только то, что успел увидеть, пока конфигу заводил.

Это не типовой сценарий, а спагетти код на уровне ооп, астронавтика с перелиньковкой зависимостей и самолюбование сплошное, смотрите как я крут, все паттерны знаю. Порадовал старика :lol: :lol: :lol:

Ну да ладно, мне до этого дела нет. Я понимаю, что это легаси с тех времен, когда ты контейнер воспринимал исключительно как сервис-локатор. Да и еще раз спасибо за интеграционный тест, редко где можно найти такую тяжелую неразбериху, настоящее испытание для контейнера.

Мне интересно другое, ты вот нифига не понял, как юзать мою поделку, и пытаешься свалить свою некомпетентность на мой контейнер. Крутишься, как уж на сковородке. Пимпл притащил, PHP DI.

На вот сравнивай с пимплом для начала:
	$container->add('service', function () {
return new TestEntryAsService;
});

$container->add('a', function () {
$factoryEntry = new TestEntryAsFactory;
$factoryEntry->service = $this->get('service');
return $factoryEntry;
});

for ($i = 0; $i < 10; $i++) {
$container->getNew('a')->test();
}

Синтаксис лаконичнее, а главное однозначный. Не нужно думать куда что обернуть.
Хочешь получи как сервис, хочешь, как новый объект. И где тут протечка?

А теперь сравнивай с PHP DI
	$container->add([
'service' => TestEntryAsService::class,
'a' => TestEntryAsFactory::class,
]);


$container->addDependences('a', ['service' => $container->get('service')]);

for ($i = 0; $i < 10; $i++) {
$container->getNew('a')->test();
}

Та же песня. Используется всего три метода, синтаксис чище и прозрачнее. По крайней мере видно, в какой аргумент внедряем. И где тут протечка? Кроме того, я могу завернуть вызов сервиса в замыкание и будет ленивая загрузка. В твоем примере объект сервиса инициализируется сразу, нужен он или нет.

Не знаю, можно ли там по другому, но что ты показал не есть хорошо.

Причем заметь, мой контейнер умеет и как пимпл, и как PHP DI, два в одном, а синтаксис прозрачнее в обоих случаях.

Я тебе больше скажу, он еще вот так может:
    $map = [
'service' => TestEntryAsService::class,

'a' => [
TestEntryAsFactory::class,
'service' => function () {
return $this->get('service');
}
]
];


$container->add($map);


for ($i = 0; $i < 10; $i++) {
$container->getNew('a')->test();
}
Это если вдруг возникнет желание сравнить его со своим говнокодом со звездочками, и где (о боже!) по умолчанию все зависимости сервисные. Это додуматься надо было. Собрал в одну кучу все возможные недостатки и считаешь, что это правильно. Покажи, где это так, у кого?

Так что давай, делай выводы сейчас. Я свои сделал:
Мой контейнер может всё и сразу, что могут все три, с которыми ты сравнивал, по отдельности. Причем синтаксис прозрачнее и проще чем у любого из них.

Так что, как говорится, не можешь срать, не мучай жёпу.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.