Как правило при работе с сущностями есть 2 подхода.
- вносить данные через конструктор
- вносить данные через сеттеры
Я выбрал подход с вводом данных через конструкторы, так как в нем нет нарушений целостности данных и он гарантирует имутабельность сущности.
Пример сущности:
<?php
class System
{
private $id;
private $alias;
private $status;
private $date;
public function __construct
(
int $id,
string $alias,
Currencies $supportedCurrencies,
SystemStatus $status,
SystemServiceInfo $serviceInfo,
Date $date
)
{
$this->id = $id;
$this->alias = $alias;
$this->supportedCurrencies = $supportedCurrencies;
$this->status = $status;
$this->serviceInfo = $serviceInfo;
$this->date = $date;
}
public function getId(): int
{
return $this->id;
}
public function getAlias(): string
{
return $this->alias;
}
public function getStatus(): SystemStatus
{
return $this->status;
}
public function getDate(): Date
{
return $this->date;
}
}
в ходе этого я с толкнулся с такой проблемой, что когда нужно обновить 1 поле, нужно пересобрать сущность (да, тут конечно сеттер был бы к стати). На ум приходит только одно фабрика + полное создание новой сущности.
Однако запутанность ситуации в том, что если я получаю сущность и мне нужно изменить в ней одно поле, для этого нужно создать новую сущность, а чтобы это сделать ее необходимо собрать из существующих данных, то появляется куча хелперов для перегонки сущности в массив и обратно.
Как в таких случаях (собирать сущность) лучше всего поступать ?