Size: a a a

2021 January 14

ВС

Владислав Субботин... in phpGeeks
Alexander Osipov
Друзья, всем привет!
Кто сталкивался с проблемой циркулярной зависимости? Я столкнулся с проблемой, где у меня есть 2 сервиса, которые нужны друг другу. Объявляя их в конструкторе через DI (laravel), они каждый раз зовут друг друга, чем, само собой, создают бесконечный цикл вызовов

У меня есть DeliveryService и CourierService, они нужны друг другу. Как можно избежать этого?
В твоём случае есть сервис доставки и сервис курьера. Посмотри на проблему с точки зрения иерархии для начала. Явно, что курьер зависит от доставки, а не наоборот. Следовательно, не надо курьеру в конструктор передавать доставку. Это выглядит как ошибка домена.
источник

ВС

Владислав Субботин... in phpGeeks
То есть: доставка знает про курьера(ов), курьер может и не знать про доставку.
источник

AO

Alexander Osipov in phpGeeks
Владислав Субботин
В твоём случае есть сервис доставки и сервис курьера. Посмотри на проблему с точки зрения иерархии для начала. Явно, что курьер зависит от доставки, а не наоборот. Следовательно, не надо курьеру в конструктор передавать доставку. Это выглядит как ошибка домена.
Да, я согласен. Но тут встает другой вопрос.

1.
Есть метод в сервисе курьеров notifyCouriers, который разруливает отправление уведомлений курьерам.
Есть метод в сервисе доставки createDelivery, который создает доставку. При создании доставки нам надо отправить уведомление курьерам, т.е. домен доставки должен знать про курьеров.

2.
Есть метод в сервисе курьеров createDeliveryEvent, который разруливает какое-либо действия курьера и ему нужно управлять доставкой, т.е., например, сменить статус доставки, поэтому домен курьеров должен знать про доставку.

Как вот тут быть?
источник

РД

Ратмир Диронин... in phpGeeks
Alexander Osipov
Да, я согласен. Но тут встает другой вопрос.

1.
Есть метод в сервисе курьеров notifyCouriers, который разруливает отправление уведомлений курьерам.
Есть метод в сервисе доставки createDelivery, который создает доставку. При создании доставки нам надо отправить уведомление курьерам, т.е. домен доставки должен знать про курьеров.

2.
Есть метод в сервисе курьеров createDeliveryEvent, который разруливает какое-либо действия курьера и ему нужно управлять доставкой, т.е., например, сменить статус доставки, поэтому домен курьеров должен знать про доставку.

Как вот тут быть?
Абстракция
источник

ВС

Владислав Субботин... in phpGeeks
> домен доставки должен знать про курьеров
Это никак не противоречит тому, что я написал. Доставка должна знать про курьеров, всё так и будет.

> и ему нужно управлять доставкой
Посмотри в сторону паттерна Observer
источник

MM

Manhunt Morgan in phpGeeks
Владислав Субботин
> домен доставки должен знать про курьеров
Это никак не противоречит тому, что я написал. Доставка должна знать про курьеров, всё так и будет.

> и ему нужно управлять доставкой
Посмотри в сторону паттерна Observer
Только хотел написать
источник

ВС

Владислав Субботин... in phpGeeks
)
источник

MM

Manhunt Morgan in phpGeeks
Первое предложение как раз подходит под описание
источник

T🐜

The Ant 🐜 in phpGeeks
Alexander Osipov
Да, я согласен. Но тут встает другой вопрос.

1.
Есть метод в сервисе курьеров notifyCouriers, который разруливает отправление уведомлений курьерам.
Есть метод в сервисе доставки createDelivery, который создает доставку. При создании доставки нам надо отправить уведомление курьерам, т.е. домен доставки должен знать про курьеров.

2.
Есть метод в сервисе курьеров createDeliveryEvent, который разруливает какое-либо действия курьера и ему нужно управлять доставкой, т.е., например, сменить статус доставки, поэтому домен курьеров должен знать про доставку.

Как вот тут быть?
по второму пункту. курьеру не надо знать про всю доставку. ему надо тока знать где посмотреть доставки на седня, и где отчитаться о проделанной работе.
У тебя там походу какой-то GOD объект
источник

AO

Alexander Osipov in phpGeeks
Да, ребят, спасибо большое 🙂
Сейчас пересмотрю эту архитектуру.
источник
2021 January 15

A

Andrey DEV in phpGeeks
var_dump(0 == 'LOGIC'); ткните меня носом, почему это true
источник

A

Andrey DEV in phpGeeks
0 == 'foobar' // true
0 == '' // true
4 == '4e' // true (4e is cast as a number and becomes 4) если кому пригодится - не знал
источник

FL

First Last in phpGeeks
Andrey DEV
var_dump(0 == 'LOGIC'); ткните меня носом, почему это true
Сделай var_dump((int) 'LOGIC');

И во-вторых: ===. Кто использует не строгое сравнение в 2021 - это плохо
источник

OK

Oleksandr Kapustin in phpGeeks
var_dump("0777" == 0777);

:)
источник

ДЩ

Дмитрий Щербаков... in phpGeeks
Andrey DEV
var_dump(0 == 'LOGIC'); ткните меня носом, почему это true
источник

FL

First Last in phpGeeks
боже блять
Почему в пхп такая ущербная работа со строками...
источник

ДЩ

Дмитрий Щербаков... in phpGeeks
First Last
боже блять
Почему в пхп такая ущербная работа со строками...
потому что динамическая типизация и в пых по умолчанию всё приходит как строки? ))
источник

ИП

Игорь Подольская... in phpGeeks
Andrey DEV
var_dump(0 == 'LOGIC'); ткните меня носом, почему это true
Потому что, по всей видимости, и ввиду несостоятельности PHP, в принципе, как и большинства веб ЯПВУ, в качестве полномасштабного языка программирования с жёсткими правилами, второй параметр конвертируется в число и производится численное сравнение. Попробуй сравнить так, и увидешь логику:

<?php
echo "Start testing operand ==<br>";

echo "<br>var_dump(0 == \"Some text\") = "; var_dump(0 == "Some text"); // 0 == 0 ?
echo "<br>var_dump(0 == \"2asd\"); = "; var_dump(0 == "2asd"); // 0 == 2 ?
echo "<br>var_dump(0 == \"asd2\"); = "; var_dump(0 == "asd2"); // 0 == 0 ?
echo "<br>var_dump(0 == \"0\"); = "; var_dump(0 == "0"); // 0 == 0 ?
echo "<br>var_dump(0 === \"0\"); = "; var_dump(0 === "0"); // 0 === "0" ?

echo "<br><br>";

die("End of tests. Terminate program.");
источник

ДЩ

Дмитрий Щербаков... in phpGeeks
>ввиду несостоятельности PHP

щас где-то ржут ВК, лицокнига и прочие единороги
источник

FL

First Last in phpGeeks
Игорь Подольская
Потому что, по всей видимости, и ввиду несостоятельности PHP, в принципе, как и большинства веб ЯПВУ, в качестве полномасштабного языка программирования с жёсткими правилами, второй параметр конвертируется в число и производится численное сравнение. Попробуй сравнить так, и увидешь логику:

<?php
echo "Start testing operand ==<br>";

echo "<br>var_dump(0 == \"Some text\") = "; var_dump(0 == "Some text"); // 0 == 0 ?
echo "<br>var_dump(0 == \"2asd\"); = "; var_dump(0 == "2asd"); // 0 == 2 ?
echo "<br>var_dump(0 == \"asd2\"); = "; var_dump(0 == "asd2"); // 0 == 0 ?
echo "<br>var_dump(0 == \"0\"); = "; var_dump(0 == "0"); // 0 == 0 ?
echo "<br>var_dump(0 === \"0\"); = "; var_dump(0 === "0"); // 0 === "0" ?

echo "<br><br>";

die("End of tests. Terminate program.");
> Потому что, по всей видимости, и ввиду несостоятельности PHP,
Потому что нужно использовать строгое сравнение, это не особенность пхп, это особенность динамической типизации
источник