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