Size: a a a

2021 August 25

КГ

Константин Грачев... in symfony
Облегчи себе жизнь, не пихай туда сервисы.  
Есть Embeddable классы для объектов, да и в целом чтобы замепить поля тащить сериалайзер это не самая умная идея
источник

DS

Danila Stivrinsh in symfony
Почему?
источник

Ш

Шурик in symfony
если тебе для тупого создания объекта из строки в базе нужны какие-то сложные сервисы - ты либо как-то криво спроектировал базу и данные в базе становятся нежизнеспособными без твоего кода, либо как-то криво спроектировал создание инстансов VO. Или же неверно провёл границы ответственностей между объектами. Может ValueObject'ы стоит упростить, а более сложную локигу унести в другие классы, которые будут получать твои VO и с ними уже работать

я так вижу
источник

КГ

Константин Грачев... in symfony
DBAL types are not designed for Dependency Injection.

We explicitly avoided using DI for DBAL types because they have to stay simple.

We’ve been asked many many times to change this behaviour, but doctrine believes that complex data manipulation should NOT happen within the very core of the persistence layer itself. That should be handled in your service layer.
источник

DS

Danila Stivrinsh in symfony
Спасибо за ссылку, ну нет так нет, будем снаружи конвертить
источник

КГ

Константин Грачев... in symfony
https://dzone.com/articles/service-injection-doctrine

Тут покрасивее, не нужно сериалайзер делать публичным как в моём случае
источник

Ш

Шурик in symfony
ну вот чуваки тоже говорят, что если нужно из строк foo и bar собрать какой-то дохера сложный объект и для этого нужны "сервисы" - что-то пошло не так
источник

DS

Danila Stivrinsh in symfony
Ну это спорно что они имеют ввиду то что вы написали
источник

Ш

Шурик in symfony
я могу ошибаться, но лично для себя я нашел подтверждение своих слов)
источник

DS

Danila Stivrinsh in symfony
На счет перевести json в вэлью обжект не похоже на что то из ряда вон
источник

Ш

Шурик in symfony
изи
источник

Ш

Шурик in symfony
public function convertToPHPValue($value, AbstractPlatform $platform): ?ConcreteValueObject
{
   return $value === null ? null : new ConcreteValueObject(\json_decode($value));
}
источник

DS

Danila Stivrinsh in symfony
Это понятно, но в реальном мире, нативный конструктор будет занят, и конкретно под этот кейс придется писать статическую фабрику.  + хлам в сущности
источник

Ш

Шурик in symfony
кем занят?
источник

DS

Danila Stivrinsh in symfony
Кодом конечно
```
class RoomOptions
{
   public function __construct(
       private ?bool   $fast = null,
       private ?int    $minRating = null,
       // use for private game
       private ?string $enemy = null,
   )
   {
   }

   public function getFast(): ?bool
   {
       return $this->fast;
   }

   public function getMinRating(): ?int
   {
       return $this->minRating;
   }

   
/**
    * Enemy nickname
    */
   
public function getEnemy(): ?string
   {
       return $this->enemy;
   }
}

```
источник

Ш

Шурик in symfony
а в базе что?
источник

Ш

Шурик in symfony
какая стринга в базе?
источник

DS

Danila Stivrinsh in symfony
в базе это json
источник

Ш

Шурик in symfony
public function convertToPHPValue($value, AbstractPlatform $platform): ?RoomOptions
{
   $dbValue = \json_decode($value, true);

   return new RoomOptions(...$dbValue);
}
источник

Ш

Шурик in symfony
обработка ошибок, само собой, отсутствует как таковая
но проверить наличие ключей - не рокет-саенс
источник