Хороший вопрос. Есть несколько причин. Я покрою только два. Первый более концептуален, а второй более конкретен.
Концептуально вы сохраняете то, что изменилось в результате выполнения команды. Что на самом деле произошло По мере того, как приложение проходит через жизненный цикл, вы вполне можете изменить способ обработки команд. Вы даже можете изменить какие события создаются. Поэтому, если у вас есть только команда, вы не можете гарантировать, что сможете восстановить состояние агрегата.
У вас также будут проблемы, если вам когда-нибудь понадобится воспроизвести ваши события. Допустим, вам нужно создать новую модель чтения на основе прошлых событий. Но если у вас их нет, вы не сможете. Также вы не хотели бы, чтобы система фактически выполняла все то, что заставляют команды делать это при перестройке агрегата или создании новых моделей чтения. Например, допустим, электронное письмо отправляется при обычной обработке определенной команды. Вы не хотите, чтобы это электронное письмо отправлялось каждый раз, когда вы перестраивали агрегат.
Надеюсь, что это имеет смысл.
Также - остерегайтесь команд 'create' 'read' update '. Это звучит как запах кода. Выезд https://danielwhittaker.me/2014/10/18/6-code-smells-cqrs-events-avoid/