Также нужно отметить, что First/FirstOrDefault/Single/SingleOrDefault являются точкой выполнения для LINQ к команде Sql. Так как оператор LINQ не был выполнен прежде, который, он в состоянии влиять на сгенерированный SQL (например, Он может добавить TOP 1 к команде sql)
Если вы действительно хотите использовать для этого CQS, я бы сказал, что и репозиторий запросов, и репозиторий записи имеют ссылку на одно и то же резервное хранилище. Обычно эта ссылка поступает через внешнюю базу данных, но в вашем случае это может быть List
В памяти обычно используется шаблон проектирования Observer .
На самом деле, вы всегда хотите использовать этот шаблон, но большинство баз данных этого не делают.
Шаблон проектирования Единица работы из Шаблоны архитектуры корпоративных приложений очень хорошо соответствует CQS - это, по сути, большая команда, которая сохраняет данные в база данных.
Похоже, вам нужна более детальная команда.
НАПРИМЕР: пользователь взаимодействует с веб-страницей (скажем, оформление заказа с помощью корзины покупок).
Несколько страниц, получающих информацию, создают команду. Команда не отправляется до тех пор, пока пользователь на самом деле не проверит, где вся информация отправляется в одну команду в домен, назовем это командой «CheckOut».
Модели презентации весьма полезны абстрагирование этого типа взаимодействия.
Надеюсь, это поможет.
Грег
Также по остальным вопросам ...
Это больше касается конечной согласованности, а не CQRS. Вам не нужно в конечном итоге быть согласованным с CQRS, вы можете сделать так, чтобы обработка команды также записывалась в хранилище отчетов (или использовать одно и то же физическое хранилище для обоих, как упоминалось) согласованным образом. Я на самом деле рекомендую людям сделать это в качестве базовой архитектуры, а затем прийти к заключению и ввести возможную согласованность там, где это необходимо, поскольку с этим связаны затраты.
JdonFramework - это Java-фреймворк CQRS DDD, он предоставляет события домена + асинхронный шаблон, подробнее https://jdon.dev.java.net/