Size: a a a

2020 July 28

RT

Roman Tsurkanu in Yii Framework 3
ну то есть класс может содержать кучу еще всего
источник

RT

Roman Tsurkanu in Yii Framework 3
и зависимости и т д и тп
источник

Д

Дмитрий in Yii Framework 3
Payload'у не нужны зависимости, это простая dto.
тем более перед созданием Message у нас уже есть объект типа PayloadInterface, зачем его распаковывать?
источник

RT

Roman Tsurkanu in Yii Framework 3
не нужны да, но так как это интерфейс, в реализации может быть все по идее
источник

RT

Roman Tsurkanu in Yii Framework 3
если бы был final  то ок
источник

RT

Roman Tsurkanu in Yii Framework 3
опять же, может я неверно понял
источник

Д

Дмитрий in Yii Framework 3
Roman Tsurkanu
не нужны да, но так как это интерфейс, в реализации может быть все по идее
для этого есть LSP принцип, который должен будет соблюдаться в этом случае.
источник

В

Виктор in Yii Framework 3
Roman Tsurkanu
насколько я понял ответ - если возвращать PayloadInterface то надо возвращать весь класс который реализует PayloadInterface
В целом да. Дело тут в том, что есть как минимум кейс с перезапуском задачи, где в message содержатся сырые данные, пришедшие с сервера очередей (десериализованная строка).
MessageInterface управляется на стороне библиотеки: она его нигде не принимает на вход (кроме непосредственно драйвера, который исключительно для внутреннего пользования) и отдает пользователю на выход.
А PayloadInterface - это то, что мы принимаем от пользователя. Какая там будет реализация, какие доп. интерфейсы будут реализованы, мб какие зависимости - тут все полностью зависит от юзера. Мы лишь гарантируем наличие некоторых методов и тип возвращаемых ими данных.
В то же время со стороны юзера, если некоторый payload будет сконвертирован в message, будет логично ожидать, что возвращаемый этим message payload будет тем же самым payload, который юзер туда передал, а этого мы гарантировать не можем.
источник

Д

Дмитрий in Yii Framework 3
я бы еще от MessageInterface отделил getId/setId в отдельный интерфейс
источник

В

Виктор in Yii Framework 3
Можно хоть в ActiveRecord интерфейс payload реализовать и передавать в очередь
источник

В

Виктор in Yii Framework 3
Дмитрий
я бы еще от MessageInterface отделил getId/setId в отдельный интерфейс
Для каких кейсов?
источник

В

Виктор in Yii Framework 3
Наверное, setId стоит совсем убрать (надо посмотреть, нет ли препятствий, но маловероятно)
источник

В

Виктор in Yii Framework 3
и перенести messageinterface в неймспейс payload
источник

Д

Дмитрий in Yii Framework 3
Виктор
В целом да. Дело тут в том, что есть как минимум кейс с перезапуском задачи, где в message содержатся сырые данные, пришедшие с сервера очередей (десериализованная строка).
MessageInterface управляется на стороне библиотеки: она его нигде не принимает на вход (кроме непосредственно драйвера, который исключительно для внутреннего пользования) и отдает пользователю на выход.
А PayloadInterface - это то, что мы принимаем от пользователя. Какая там будет реализация, какие доп. интерфейсы будут реализованы, мб какие зависимости - тут все полностью зависит от юзера. Мы лишь гарантируем наличие некоторых методов и тип возвращаемых ими данных.
В то же время со стороны юзера, если некоторый payload будет сконвертирован в message, будет логично ожидать, что возвращаемый этим message payload будет тем же самым payload, который юзер туда передал, а этого мы гарантировать не можем.
> В то же время со стороны юзера, если некоторый payload будет сконвертирован в message, будет логично ожидать, что возвращаемый этим message payload будет тем же самым payload, который юзер туда передал, а этого мы гарантировать не можем.

почему?
function push(PayloadInterface $payload) {
   $message = new Message($payload);
   $message->getPayload() === $payload;// true
}
источник

В

Виктор in Yii Framework 3
Дмитрий
> В то же время со стороны юзера, если некоторый payload будет сконвертирован в message, будет логично ожидать, что возвращаемый этим message payload будет тем же самым payload, который юзер туда передал, а этого мы гарантировать не можем.

почему?
function push(PayloadInterface $payload) {
   $message = new Message($payload);
   $message->getPayload() === $payload;// true
}
источник

Д

Дмитрий in Yii Framework 3
Этог кейс для сериализации в юзерский класс Payload?
источник

В

Виктор in Yii Framework 3
Этот самый месседж потом приходит сюда https://github.com/yiisoft/yii-queue/pull/52/files#diff-25b2a09231f6ebe93a9eca7a0c74de9eR66
источник

Д

Дмитрий in Yii Framework 3
А если создать Payload(Decoder/Serializer/Transformer/Converter/etc), который будет создавать из raw строка payload объект типа PayloadInterface?
источник

Д

Дмитрий in Yii Framework 3
Виктор
Наверное, setId стоит совсем убрать (надо посмотреть, нет ли препятствий, но маловероятно)
а если getId убрать, то MessageInterface станет JobInterface :)
источник

В

Виктор in Yii Framework 3
Дмитрий
А если создать Payload(Decoder/Serializer/Transformer/Converter/etc), который будет создавать из raw строка payload объект типа PayloadInterface?
А смысл?
источник