Глоссарий
Value Object
Domain-объект без идентичности. Равенство — по значениям полей. Immutable. Money, Email, DateRange.
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).