Size: a a a

2020 December 15

AN

Alexander Nazarov in symfony
Сериализатор не используется?
источник

KB

Kirill Bondarenko in symfony
нет
источник

ВМ

Виктор Монастырев... in symfony
3. Другой вариант: использовать серриализатор и не нужно танцев с бубном вокруг своей реализаци
источник

VM

Volodymyr Melko in symfony
можно и в обычный конструктор, если эта ДТО используется только для мапинга ответов одного сервиса

можно завернуть в фабрику, чтоб в тестах мокать фабрику и не создавать респонс для создания ДТО
источник

KB

Kirill Bondarenko in symfony
это либка для работы с api, из зависимостей только guzzle.
была идея свой нормалайзер делать но показалось сильно избыточным
источник

VM

Volodymyr Melko in symfony
Kirill Bondarenko
это либка для работы с api, из зависимостей только guzzle.
была идея свой нормалайзер делать но показалось сильно избыточным
короче, конструктор - норм тема, если ты точно знаешь что и куда ты будешь мапить
источник

AN

Alexander Nazarov in symfony
Я бы делал какую то прослойку в виде нормалайзера. Там кейсов которые может потребоваться разрулить может быть овер дофига.
источник

AN

Alexander Nazarov in symfony
Ну либо как ребята советуют конструктор, если ничего сложного не будет.
источник

KB

Kirill Bondarenko in symfony
если обычный конструктор, смущает что один объект с 20+ свойствами может возвращаться в нескольких запросах, и тогда надо дублировать new Dto($data['param1']....)
источник

ВМ

Виктор Монастырев... in symfony
Kirill Bondarenko
если обычный конструктор, смущает что один объект с 20+ свойствами может возвращаться в нескольких запросах, и тогда надо дублировать new Dto($data['param1']....)
Напиши свой парам конвертор
источник

AN

Alexander Nazarov in symfony
Виктор Монастырев
Напиши свой парам конвертор
это ответ от какого то сервиса, который он через guzzle получил
источник

ВМ

Виктор Монастырев... in symfony
Alexander Nazarov
это ответ от какого то сервиса, который он через guzzle получил
аааа, пропустил
источник

AN

Alexander Nazarov in symfony
Kirill Bondarenko
если обычный конструктор, смущает что один объект с 20+ свойствами может возвращаться в нескольких запросах, и тогда надо дублировать new Dto($data['param1']....)
то есть у тебя могут эти объекты возвращаться вложенные например в коллекции? Они могут быть как свойства других объектов?
источник

ВМ

Виктор Монастырев... in symfony
Kirill Bondarenko
если обычный конструктор, смущает что один объект с 20+ свойствами может возвращаться в нескольких запросах, и тогда надо дублировать new Dto($data['param1']....)
тогда проще в констурктор передавать просто массив, а там под капотом самому разруливать паммиг, что бы не указывать ключи массива
источник

ВМ

Виктор Монастырев... in symfony
Но все равно выглядит все это как проще подтянуть серриализатор симфоневский или JMS и скармливать ему этот массив, тем более у них там много функционала всякого, включая указание полей при серриализации
источник

KB

Kirill Bondarenko in symfony
Alexander Nazarov
то есть у тебя могут эти объекты возвращаться вложенные например в коллекции? Они могут быть как свойства других объектов?
могут быть вложенные. сейчас для таких кейсов используются именованные конструкторы во всех структурах которые могут возвращаться
источник

AN

Alexander Nazarov in symfony
Kirill Bondarenko
могут быть вложенные. сейчас для таких кейсов используются именованные конструкторы во всех структурах которые могут возвращаться
Ну видишь сколько всего нужно велосипедить. Не легче ли подключить сериализатор?
источник

AN

Alexander Nazarov in symfony
тогда надо дублировать new Dto($data['param1']....)

Я
вот тут не понял. Что дублировать, зачем?
источник

KB

Kirill Bondarenko in symfony
Alexander Nazarov
тогда надо дублировать new Dto($data['param1']....)

Я
вот тут не понял. Что дублировать, зачем?
если несколько endpoint возвращают одну структуру, придется дублировать раскручивание массив ответа
function getSomeData(): Dto
{
 $data = $apiClient->getSomeData();
 $dto = new Dto($data['param1'],...)
 return $dto;
}

function getOtherData(): Dto
{
 $data = $apiClient->getSomeData();
 $dto = new Dto($data['param1'],...)
 return $dto;
}
источник

AN

Alexander Nazarov in symfony
Kirill Bondarenko
если несколько endpoint возвращают одну структуру, придется дублировать раскручивание массив ответа
function getSomeData(): Dto
{
 $data = $apiClient->getSomeData();
 $dto = new Dto($data['param1'],...)
 return $dto;
}

function getOtherData(): Dto
{
 $data = $apiClient->getSomeData();
 $dto = new Dto($data['param1'],...)
 return $dto;
}
Так оно придется и с фабрикой тоже самое делать же. Ты хочешь нормализованные данные в виде массива привести к объекту по определенной логике. Либо она будет в конструкторе, либо в статическом методе либо в фабрике. Замени код на фабрику и вместо new Dto будет вызов фабрики.
источник