Как проверить входные данные, если есть CQRS, DTO и Entity? - PullRequest
1 голос
/ 23 февраля 2020

. Net Core 3, Чистая архитектура.

Я прочитал много статей о проверке данных с помощью CQRS. Например, там и там .

Я сделал несколько выводов:

  1. Необходимо проверить данные в DTO. Это контракт для сущностей.
  2. Некоторые предложения авторов проверяют дату в сущностях (домен).
  3. В CQRS AbstractValidator мы можем проверять тоже, но другие правила.

Проверка поля электронной почты будет в 1 и 2. Ограничение по возрасту будет в 3.

Но три проверки на сервере + одна на клиенте - проблема (большая DRY). Где лучше валидация в DTO или Entities? Я думаю в DTO, потому что когда я получаю DTO из ввода, я могу проверить и вызвать ModelState.IsValid. Но я читал некоторые статьи, которые также должны проверять входные данные в сущностях.

Итак, я запутался. Можете ли вы объяснить мне:

Если нужно проверить поле электронной почты и возрастное ограничение (18), где нужно поставить проверку в Чистая архитектура с CQRS?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

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

1 голос
/ 24 февраля 2020

Все зависит от типа проверки. Это поверхностная или глубокая проверка?

Поверхностная проверка - это, например, надежность пароля или проверка правильности формата URL-адреса или адреса электронной почты. Принимая во внимание, что глубокая проверка - это то, что важно для домена. Так что это может быть что-то вроде: опасен ли этот автомобиль go или этот человек слишком высок для того, чтобы выдавать кредит.

Ознакомьтесь с этим сообщением, в котором более подробно объясняется эта концепция с точки зрения CQRS: Как проверить команды в приложении CQRS

...