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. и выглядит чище
+2
@des1roer именно. И добавить статический фабричный метод, который будет приводить типы перед вызовом конструктора. Никаких геттеров не нужно, у нас публичные ридонли поля.
@mvs если хочется еще по заморачиваться и челленджей для такой задачи, то подумайте о том, что будет, когда обновлять курсы надо не через HTTP. Допустим, из файла. Тогда RatesUpdater станет HttpRatesUpdater унаследованным от RatesUpdaterInterface. По факту же главное передать валидный ДТО в сервис. А откуда это ДТО пришло - всё равно.
0
Спасибо за идею!
0
Sign up to leave a comment.
Демо Symfony конвертер валют