Value Objects

Основные моменты (взяты отсюда https://codete.com/blog/value-objects/)

  1. Value Objects are immutable

final class Money { 
/** @var int */ 
private $value;
/** @var string */
private $currency;

public function __construct(int $value, string $currency = 'USD')
{
    $this->value = $value;
    $this->currency = $currency;
}

public function equals(Money $money): bool
{
    return $this->value === $money->value
        && $this->currency === $money->currency;
}

public function getValue(): int
{
    return $this->value;
}

public function getCurrency(): string
{
    return $this->currency;
}
}

2. Value Objects можно рассматривать как примитивные объекты. Если в языке программирования не поддерживается создание собственных примитивных типов, то можно создавать Value Objects.

3. Value Objects могут не только содеражть геттеры, но и другие вспомогательные функции (либо полностью новый, либо на основе текущего, например, результат добавления некоторой суммы к объекту Money), предоставление различного представления для его внутреннего состояния (например, IP-адрес VO может представлять IP-адрес в виде строки или двоичных данных)

Last updated