Size: a a a

2021 February 25

ПГ

Павел Г. in PHP
Sergei Baikin
Отделите логику от зависимостей

Простое правило
1 Если есть логика то нет зависимостей
2. Если есть зависимоти то нет логики
Спасибо, но немного не понятно это правило. В логике же могут участвовать сервисы, какие то либы.  Или имеется ввиду выносить из логики все посторонее в отдельные классы и подтягивать их через DI ?
источник

SB

Sergei Baikin in PHP
Павел Г.
Спасибо, но немного не понятно это правило. В логике же могут участвовать сервисы, какие то либы.  Или имеется ввиду выносить из логики все посторонее в отдельные классы и подтягивать их через DI ?
источник

V

Vlad🍁 in PHP
Dashko Andrey
ну да, можно и не веб, получать данные к примеру через сокет или принимать сразу udp, tcp пакеты
Окей, подумаю, что можно сделать
источник

SB

Sergei Baikin in PHP
Павел Г.
Спасибо, но немного не понятно это правило. В логике же могут участвовать сервисы, какие то либы.  Или имеется ввиду выносить из логики все посторонее в отдельные классы и подтягивать их через DI ?
сервисы не могут поидее

Если DI что то вносит то это зависимости там не должно быть логики
Зависьте от логики
не зависьте логикой от внешних факторов
источник

SB

Sergei Baikin in PHP
Павел Г.
Приветствую. Подскажите плиз про тестируемый код :)
Кейс: есть php класс - Смс Клиент для хождения в апи стороннего сервиса. У него два публичных метода:
sendMessage($message, $phone) ;
getMessageStatus(int $messageId);

У апи идет обращение через xml, и чтобы его построить есть отдельный приватный метод request, который принимает массив данных и строит запрос. Для построения xml подтягивается дополнительный класс через DI . + Используется газл для отправки

В итоге, чтобы протестировать простой метод  sendMessage, который превращает два аргумента функции в массив для request приходится писать два мока, которые так то и не участвуют в методе  sendMessage, те же самые моки делать для getMessageStatus . При этом выходит если 10 методов будет, для каждого нужно писать мок газла и xml либы.  

Какой правильный выход? Выносить метод request в отдельный класс (в итоге, если брать более глобально, то надо отказываться от сложных private/protected методов и выносить всегда их в отдельные классы )?  Или просто по другому как-то писать тест и моки?
Еще можно пологатся на модули и в них скрывать логику за  @internal и psalm например контролировать что никто не использует внутрение пакеты
источник

ПГ

Павел Г. in PHP
Sergei Baikin
сервисы не могут поидее

Если DI что то вносит то это зависимости там не должно быть логики
Зависьте от логики
не зависьте логикой от внешних факторов
По ссылке посмотрю, спасибо.  Пока не совсем понятно, но примерно должно быть так: Отдельно зависимости, отдельно логика, и какой то фасад который их соединяет?

В итоге в моем случае: сейчас 1 класс (с методом sendMessage и request). Я предложил сделать два класса (отделить request в отдельный класс и чтобы sendMessage использовал эту зависимость), вы предлагаете 3? Отдельно чистая логика построения массива sendMessage, отдельно Request, и еще фасад, который тянет эти две зависимости и соединяет?
источник

BT

Bohdan Turchyk in PHP
Переслано от Alyssa Martynova
Что ждет PHP в 2021?
Узнаем 27 февраля на большом стриме.

🎤 2 доклада: о WebRTC от Ильи Левина из Skyeng, о gRPC — от Антона Жукова из ManyChat.

🏄 Острые дискуссии, мнения о 2020, планы на 2021. В эфир придут:

- Никита Попов (PHP core team)
- Дмитрий Елисеев (ElisDN)
- Валентин Удальцов (Пых)
- Роман Пронский (PHP-дайджест)
- Александр Макаров (Yii)
- Сергей Жук (Между Скобок)
- Константин Буркалев (SDCast)
- Петр Мязин (Пятиминутка PHP)
- Антон Околелов (Цинковый прод)
- Николай Пучко (PHPToday)

🎁 Покажем итоги опроса про лучшее из мира PHP за 2020, разыграем фирменного слоника и целый пул других подарков.

Трансляции в 11:00 (Москва/Минск), 10:00 — КиевТрансляции в 11:00 (Москва/Минск), 10:00 — Киев
источник

BT

Bohdan Turchyk in PHP
@desper1989 и сюда тебя не позвали, да что ж такое же...)
источник

MM

Maksim Masiukevich in PHP
источник

EG

Egor Gruzdev in PHP
Vlad🍁
Кто-нибудь знает как запустить в ларавельке бесконечную задачу (разбивка потока по сегментам с ffmpeg)? Читаю очереди и похоже не сильно походит на то, что мне нужно, потому что имеет ограничение в виде кол-во одновременных задач и по времени выполнения
Так в job поставь что попыток бесконечно, т.е. 0

И будь бесконечно.

Только рекомендую повешать макс кол-во не обработаных исключений, что неуйти в бесконечность.

А можешь Batch глянуть как раз для этого сделано.

https://laravel.com/docs/8.x/queues#job-batching
источник

V

Vlad🍁 in PHP
Egor Gruzdev
Так в job поставь что попыток бесконечно, т.е. 0

И будь бесконечно.

Только рекомендую повешать макс кол-во не обработаных исключений, что неуйти в бесконечность.

А можешь Batch глянуть как раз для этого сделано.

https://laravel.com/docs/8.x/queues#job-batching
Спасибо, посмотрю
источник

SB

Sergei Baikin in PHP
Павел Г.
По ссылке посмотрю, спасибо.  Пока не совсем понятно, но примерно должно быть так: Отдельно зависимости, отдельно логика, и какой то фасад который их соединяет?

В итоге в моем случае: сейчас 1 класс (с методом sendMessage и request). Я предложил сделать два класса (отделить request в отдельный класс и чтобы sendMessage использовал эту зависимость), вы предлагаете 3? Отдельно чистая логика построения массива sendMessage, отдельно Request, и еще фасад, который тянет эти две зависимости и соединяет?
да нет посто один класс с зависимостями а другой с логикой
и используете класс с логикой в классе с зависимостями в котором будет просто линейное действие вызов одного за другим без ветвлений и прочего где достаточно проверить только один  интеграционный саксэс тест
источник

ПГ

Павел Г. in PHP
Sergei Baikin
да нет посто один класс с зависимостями а другой с логикой
и используете класс с логикой в классе с зависимостями в котором будет просто линейное действие вызов одного за другим без ветвлений и прочего где достаточно проверить только один  интеграционный саксэс тест
Понял, спасибо :)
источник

AL

Anton Lakotka in PHP
Bohdan Turchyk
Переслано от Alyssa Martynova
Что ждет PHP в 2021?
Узнаем 27 февраля на большом стриме.

🎤 2 доклада: о WebRTC от Ильи Левина из Skyeng, о gRPC — от Антона Жукова из ManyChat.

🏄 Острые дискуссии, мнения о 2020, планы на 2021. В эфир придут:

- Никита Попов (PHP core team)
- Дмитрий Елисеев (ElisDN)
- Валентин Удальцов (Пых)
- Роман Пронский (PHP-дайджест)
- Александр Макаров (Yii)
- Сергей Жук (Между Скобок)
- Константин Буркалев (SDCast)
- Петр Мязин (Пятиминутка PHP)
- Антон Околелов (Цинковый прод)
- Николай Пучко (PHPToday)

🎁 Покажем итоги опроса про лучшее из мира PHP за 2020, разыграем фирменного слоника и целый пул других подарков.

Трансляции в 11:00 (Москва/Минск), 10:00 — КиевТрансляции в 11:00 (Москва/Минск), 10:00 — Киев
по сути только Никита чего-то интересного скажет. всех остальных мы знаем
источник

KN

Kirill Nesmeyanov in PHP
Там, кстати, про темпорал митапчик через минут 5-10, который был на пред-предыдущем Дайджесте с Титовым.

P.S. Прямая ссылка: https://epam.zoom.us/j/96132313541
источник

KN

Kirill Nesmeyanov in PHP
Переслано от Aleksandr Novikov
Привет! Напоминаю, что сегодня в 19.00 будет воркшоп
Ссылка на подключение уже появилась вот тут, трансляция будет через Zoom, поэтому если у вас еще нет клиента - лучше установить заранее .
Также (ни разу не было - и вот опять) за качественные вопросы мы будем раздавать призы, так что не стесняйтесь их задавать :)
источник

VC

Vladimir Chernyshev in PHP
на интереном месте зашёл “Если Линукс могу только посочувствовать”
источник

MM

Maksim Masiukevich in PHP
Kirill Nesmeyanov
Переслано от Aleksandr Novikov
Привет! Напоминаю, что сегодня в 19.00 будет воркшоп
Ссылка на подключение уже появилась вот тут, трансляция будет через Zoom, поэтому если у вас еще нет клиента - лучше установить заранее .
Также (ни разу не было - и вот опять) за качественные вопросы мы будем раздавать призы, так что не стесняйтесь их задавать :)
а ссылка на зум есть?
источник

MM

Maksim Masiukevich in PHP
регаться в какой-то галимой херне лень)
источник

AL

Anton Lakotka in PHP
выше же
источник