Допустим, у нас есть архитектура, основанная на CQRS, с такими компонентами, как команды, модель домена, события домена, DTO модели чтения.
Конечно, мы можем использовать объекты-значения в нашей модели предметной области. Мой вопрос: должны ли они также использоваться:
Я не видел примеров, где объекты-значения (VO) используются в компонентах, упомянутых выше. Вместо этого используются примитивные типы. Может быть, это просто упрощенные примеры. В конце концов, я понимаю использование ВО в DDD так, что они действуют как клей для всего приложения.
Моя мотивация:
Команды.
Допустим, пользователь отправляет форму, содержащую поля адреса. У нас есть объект значения адреса для представления этой концепции. При создании команды в клиенте мы все равно должны проверять вводимые пользователем данные, и когда они правильно сформированы, мы можем создать объект Address прямо здесь и инициализировать Command с его помощью. Я не вижу необходимости делегировать создание объекта Address обработчику команд.
События домена.
Модель предметной области уже работает в терминах объектов-значений, поэтому, публикуя события с ВО вместо преобразования их в примитивные типы, мы можем избежать некоторого кода сопоставления. Я почти уверен, что в этом случае можно использовать голосовые вызовы.
DTO.
Если наши DTO на стороне запроса могут содержать объекты значений, это обеспечивает некоторую гибкость. Например, если у нас есть объект Money, мы можем выбрать, отображать ли его в евро или долларах, нет необходимости изменять модель чтения.