Чтение и запись имеют разные требования: запросы на чтение — сложные JOIN-ы и агрегации; команды — транзакционная целостность. Разделение позволяет оптимизировать каждое независимо.
Одна БД, но разные классы: CreateOrderCommand и OrderSummaryQuery. Минимальная сложность, но уже даёт структуру.
Write-side хранит события (Event Store), read-side строит денормализованные проекции для чтения. Высокая сложность, но полный audit trail и возможность «перемотать» состояние.
CQRS добавляет сложность. Оправдан в сложных доменах с разной нагрузкой на чтение и запись. Для CRUD-приложений — лишний.