BonBonSlick
@BonBonSlick
Junior Web Developer Trainee

Доступ к RequestStack в обход SQRS DTOs?

Когда мы получаем доступ в command, query, event handler к RequestStack мы обходим саму команду. То есть из реквеста можно получить кучу других параметров + те же что были переданы в команде. Что делает команду как ДТО валидации, но разработчик может взять данные и из самого запроса.
Так немного размывается ответственность и границы, RequestStack похож на хак в обход ДТО.
К примеру, команды всегда могут быть пустыми, мы получаем доступ к данным из RequestStack и внутри Хендлера создаем ДТО валидации и проводим иные валидации.

class ValidateRegistration {
   // Assert/NotBlunk
   // Assert/Type('string')
   // Assert/Length(['min' => 3])
   public string $email;
}

class RegisterUserCommand { // can be filled with data to validate }

class RegisterUserCommandHandler {

public function __construct (RequestStack $requestStack, IValidationService $validator)
// init
$this->lastReuqest = $reqeustStack->getLastRequest();
}

public function __invoke(RegisterUserCommand $command) {

$this->validator->validate(...)
// or
$dto = new ValidateRegistration($this->lastRequest->request->get('email'))
$this->validator->validate($dto);

// $dto for validation could be self-contained with Annotations, so we could validate its params without calling validator
}


Вот, вверху описан подход который оставляет команду пустую и команда как поставщик сама себя валидирует.
Из недостатков наверное стоит отметить когда хендлер хендлит несколько комманд, каждую надо валидировать по разному.
И речь тут исключительно о базовой валидации, более сложная, к примеру проверка на существование или может ли вообще юзер регестрироваться, все такие условия выполнены и без того в команде.

Будет ли нарушать в CQRS Handler доступ и использование RequestStack какие либо принципы?
Обязательно ли брать все данные из команды, или можно брать из запроса?
Все данные или часть?
Если часть, то какую?
  • Вопрос задан
  • 35 просмотров
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Запроса может не быть. Команда может выполняться из консоли, из очереди etc.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы