Value Objects ядра

Документ описывает value objects в core/domain/valueObject/. Value objects — неизменяемые объекты, описывающие значения с инвариантами.

1. Каталог

КлассФайлОписание
AbstractIntIdvalueObject/AbstractIntId.phpБаза для ID-объектов
RoleIdvalueObject/RoleId.phpID роли
UserIdvalueObject/UserId.phpID пользователя
UserRoleIdvalueObject/UserRoleId.phpID назначения роли
EmailvalueObject/Email.phpВалидный email
RoleNamevalueObject/RoleName.phpИмя роли (правила)
DatevalueObject/Date.phpДата (Y-m-d, время обнулено)
IdRangevalueObject/IdRange.phpДиапазон/набор ID

2. AbstractIntId

Базовый класс для идентификаторов.

abstract class AbstractIntId
{
    public function __construct(int $value);  // value < 0 → ValidationException
    public function value(): int;
    public function equals(self $other): bool;   // сравнение по классу и значению
    public function isNew(): bool;               // value === 0
}

Производные: RoleId, UserId, UserRoleId — просто наследуют.

3. Email

final class Email
{
    public function __construct(string $email); // невалидный → ValidationException
    public function value(): string;            // trim'нутый email
}

Регулярное выражение валидации:

/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/

4. RoleName

final class RoleName
{
    public function __construct(string $name); // → ValidationException
    public function value(): string;
}

Правила:

5. Date

final class Date
{
    public function __construct(DateTimeImmutable $value); // время обнуляется (00:00:00)
    public static function fromString(string $date): self;  // "Y-m-d"
    public function value(): DateTimeImmutable;
    public function toString(): string;                     // "Y-m-d"
    public function equals(self $other): bool;
}

6. IdRange

Парсит строку с ID/диапазонами в отсортированный уникальный массив int.

Принимаемые форматы строк:

ФорматПримерРезультат
Один ID1[1]
Несколько1,2,3,4[1,2,3,4]
Диапазон2:20[2..20]
Смешанный1,3:20[1,3..20]
Смешанный1,3:20,27[1,3..20,27]

Методы

public function __construct(string $input);
public static function fromString(?string $input): self;
public static function fromArray(array $ids): self;
public static function empty(): self;
public function toArray(): array;
public function contains(int $id): bool;
public function isEmpty(): bool;
public function count(): int;
public function getFirst(): ?int;
public function getLast(): ?int;

Инварианты / исключения

Использование