Есть ли место для объектов-значений в модели предметной области?
Позволяет определить объект-значение как объект с неизменным состоянием, которое защищает его инвариантыи не имеет конкретного идентификатора.
источник событий модель домена в этом контексте представляет собой домен, который полностью или частично получен из события, что означает, что его текущее состояние может быть получено из применения всех событий, которыепроизошли в прошлом.Сами события считаются неизменяемыми, даже со временем.
Прошла дискуссия о действительности использования объектов-значений в событиях - этот вопрос идет немного дальше: есть ли у объектов-значений место в событиивсе домены вообще ?
(потенциальная) проблема с использованием объектов-значений заключается в том, что довольно сложно изменить домен таким образом, чтобы инварианты были сжаты.
Примером этого сценария может быть объект значения Username
с единственным ограничением, что имя должно быть где-то между 2 и 16 символами.
Хотя в течение некоторого времени это работало хорошо,бизнес решает разрешить имена пользователей не менее 5 символов.Начинается период миграции, и пользователям с именами менее 5 символов предлагается обновить свои имена.
Допустим, процесс прошел успешно, исправления применены, и все довольны.Мы ужесточаем ограничения для нашего объекта значения Username
, требуя не менее 5 символов.
Некоторое время все довольны, но затем мы обнаруживаем проблему со снимками и воспроизводим все события.
Теперь перед нами исключение из нашего Username
объекта: загружая исторические данные, мы нарушаем инвариант нашего домена.
Правила для объектов-значений применяются задним числом -делает ли это их по сути непригодными для источников событий?Стоит ли применять управление версиями объектов-значений?Есть ли более простой способ избежать таких проблем?