Понимание принципа CQRS

Обсуждаем, как правильно строить приложения
Ответить
Аватара пользователя
pistol
Сообщения: 216
Зарегистрирован: 2014.07.12, 15:18
Откуда: Курган
Контактная информация:

Понимание принципа CQRS

Сообщение pistol »

Поправьте, если что-то не так.

Отталкиваюсь от картинки:

Изображение

Допустим, есть форма обращения к предприятию через сайт, при отправке которой происходит куча всего, кроме просто сохранения в базу. Принцип CQRS будет соблюден, если я данные буду получать в контроллере напрямую из базы (или в случае с YII через find доменной модели):

Код: Выделить всё

$list = Feedback::find()->new()->all();
Но вот команды типа "Добавить фидбек" нужно обязательно делать через дополнительный доменный слой:

Код: Выделить всё

(new \common\commands\FeedbackSender($mailerService, $feedbackModel, $userModel))->execute();
(понимаю, что зависимости можно через контейнер инъектить, пример просто для наглядности).
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Понимание принципа CQRS

Сообщение zelenin »

cqrs - это вообще о разделении изменений данных и запросах данных. Оно необязательно поверх ddd сделано.
формально можно набросать такой код:

Код: Выделить всё

$command = CreatePost::fromRequest(...);
$post = $this->commandHandler->execute($command);
и

Код: Выделить всё

$query = new GetPost($request->get('postId'));
$post = $this->queryHandler->execute($query);
разделение этих двух обязанностей например позволит записывать данные в тяжелую реляционную базу, а получать данные из легкого денормализованного хранилища.
Аватара пользователя
pistol
Сообщения: 216
Зарегистрирован: 2014.07.12, 15:18
Откуда: Курган
Контактная информация:

Re: Понимание принципа CQRS

Сообщение pistol »

Оно необязательно поверх ddd сделано.
А есть еще примеры уместного использования? Кроме построения быстрых отчетов в обход толстого бизнес-слоя в DDD и
позволит записывать данные в тяжелую реляционную базу, а получать данные из легкого денормализованного хранилища.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Понимание принципа CQRS

Сообщение zelenin »

pistol писал(а): 2017.03.26, 21:37
Оно необязательно поверх ddd сделано.
А есть еще примеры уместного использования? Кроме построения быстрых отчетов в обход толстого бизнес-слоя в DDD и
позволит записывать данные в тяжелую реляционную базу, а получать данные из легкого денормализованного хранилища.
"построения быстрых отчетов в обход толстого бизнес-слоя в DDD" - это частное от общего "позволит записывать данные в тяжелую реляционную базу, а получать данные из легкого денормализованного хранилища". Любой кейс где выгодно не таскать тяжелые модели из тяжелой базы, а выгодно получать дтошки из быстрого хранилища. например админка vs фронт.
Ответить