Предположим, у нас есть архитектура, основанная на CQRS, с такими компонентами, как команды, модель домена, события домена, чтение моделей DTO.
Конечно, мы можем использовать объекты Value в нашей модели домена. Мой вопрос, они должны также быть использованы в:Объекты Value в CQRS - где использовать
- Команды
- События
- DTOs
я не видел ни одного примера, где Value Objects (VO) используются в компонентах упомянутое выше. Вместо этого используются примитивные типы. Может быть, это просто упрощенные примеры. В конце концов, мое понимание использования VO в DDD заключается в том, что они действуют как клей для всего приложения.
Мотивация:
Команды.
Предположим, что пользователь отправил форму, содержащую поля адреса. У нас есть объект Address Value для представления этой концепции. При построении команды в клиенте мы должны все равно проверять ввод пользователя, и когда он хорошо сформирован, мы можем создать объект Address прямо там и инициализировать команду с ним. Я не вижу необходимости делегировать создание объекта Address в обработчик команд.
События домена.
Доменная модель уже работает с точки зрения объектов-объектов, поэтому, публикуя события с VO вместо их преобразования в примитивные типы, мы можем избежать некоторого кода сопоставления. Я почти уверен, что в этом случае использовать VO.
DTOs.
Если наши DTO на стороне запроса могут содержать объекты Value, это обеспечивает некоторую гибкость. Например, если у нас есть объект Money, мы можем выбрать, показывать ли его в EUR или USD, не нужно изменять Read Model.
Подумав об этом некоторое время, мой вывод: наличие объектов с активным поведением в Events просто невозможно, поскольку они должны представлять исторические данные, и сегодня у нас нет возможности сериализовать поведение. Что касается Commands и Read Model DTO, это может сработать, и мне все еще неясно, подходит ли оно, связанное с ним, или нет (во всяком случае, это больше о том, должны ли оба слоя домена и представления ссылаться на ту же реализацию Money VO ' а не «должен TransferMoneyCommand содержать Money VO или MoneyDTO»). – driushkin