Объекты-значения в CQRS - где использовать

Допустим, у нас есть архитектура, основанная на CQRS, с такими компонентами, как команды, модель домена, события домена, DTO модели чтения.
Конечно, мы можем использовать объекты-значения в нашей модели предметной области. Мой вопрос: должны ли они также использоваться:

  1. Команды
  2. События
  3. DTO

Я не видел примеров, где объекты-значения (VO) используются в компонентах, упомянутых выше. Вместо этого используются примитивные типы. Может быть, это просто упрощенные примеры. В конце концов, я понимаю использование ВО в DDD так, что они действуют как клей для всего приложения.

Моя мотивация:

Команды.
Допустим, пользователь отправляет форму, содержащую поля адреса. У нас есть объект значения адреса для представления этой концепции. При создании команды в клиенте мы все равно должны проверять вводимые пользователем данные, и когда они правильно сформированы, мы можем создать объект Address прямо здесь и инициализировать Command с его помощью. Я не вижу необходимости делегировать создание объекта Address обработчику команд.

События домена.
Модель предметной области уже работает в терминах объектов-значений, поэтому, публикуя события с ВО вместо преобразования их в примитивные типы, мы можем избежать некоторого кода сопоставления. Я почти уверен, что в этом случае можно использовать голосовые вызовы.

DTO.
Если наши DTO на стороне запроса могут содержать объекты значений, это обеспечивает некоторую гибкость. Например, если у нас есть объект Money, мы можем выбрать, отображать ли его в евро или долларах, нет необходимости изменять модель чтения.

36
задан driushkin 2 February 2011 в 00:14
поделиться