Value Object — объект, идентичность которого не важна, важны только значения полей.

Свойства:

  • Immutable. Изменение = создание нового объекта.
  • Равенство по значению. Два экземпляра с одинаковыми полями — эквивалентны.
  • Инкапсулирует правила. Money.__add__ проверяет одинаковость валют. Email.__init__ валидирует формат.
  • Не хранится «сам по себе». Живёт внутри Entity/Aggregate.

Примеры: Money, Email, DateRange, Address, Coordinates, PhoneNumber.

Практика: примитивы (str, int) часто маскируются под Value Objects. Вместо email: str пишите email: Email. Это лечит «primitive obsession» и переносит валидацию из сервисов в тип.

В Python — frozen=True в @dataclass или Pydantic BaseModel с model_config = ConfigDict(frozen=True).

Синонимы

VOValueЗначение

Не путать с

← ко всему глоссарию