Pull to refresh

Comments 3

код слабо читаем

class Rate
{
    private readonly DateTimeImmutable $date;
    private readonly string $rate;

    public function __construct(
        public readonly string $currency,
        public readonly string $base,
        string $rate,
        string $date, 
    ) {
        $this->date = new DateTimeImmutable($date);
        $this->rate = (string)Decimal::create($rate, 8);
    }

    public function getDate(): DateTimeImmutable
    {
        return $this->date;
    }

    public function getRate(): string
    {
        return $this->rate;
    }
}

если уж есть модификатор readonly то ничто не мешает в dto свойства сделать public. и выглядит чище

@des1roer именно. И добавить статический фабричный метод, который будет приводить типы перед вызовом конструктора. Никаких геттеров не нужно, у нас публичные ридонли поля.

@mvs если хочется еще по заморачиваться и челленджей для такой задачи, то подумайте о том, что будет, когда обновлять курсы надо не через HTTP. Допустим, из файла. Тогда RatesUpdater станет HttpRatesUpdater унаследованным от RatesUpdaterInterface. По факту же главное передать валидный ДТО в сервис. А откуда это ДТО пришло - всё равно.

Спасибо за идею!

Sign up to leave a comment.

Articles