Вопрос

Один из основных принципов CQRS, насколько я понимаю, заключается в том, что команды должны быть ориентированы на поведение и иметь ценность для бизнеса или UL, а не на данные, то есть CRUD.Вместо того, чтобы сосредотачиваться на обновлении информации о клиенте, у нас есть такие команды, как CustomerHasMoved.Что делать, если у вас есть экраны CRUD, которые предназначены для исправления определенных данных.Например, нам нужно изменить имя клиента, которое написано с ошибкой.Это не имеет особого значения для бизнеса.Должно ли это быть просто под эгидой команды UpdateCustomer?

Это было полезно?

Решение

На самом деле, могут быть разные причины обновить имя клиента.Как вы сказали, это могло быть написано с ошибкой или...вы могли бы выйти замуж и сменить имя на имя мужа.

Если бы у вас была только команда UpdateCustomer, вы потеряли бы исходное намерение и не смогли бы иметь разное поведение для каждой из них.Если имя было продано по ошибке, это может быть так же просто, как обновление базы данных, тогда как, если ваш клиент женился, вам, возможно, придется уведомить отдел маркетинга, чтобы они могли предложить скидку.

В случае, если ваша сущность является чисто CRUD, то есть нет намерения, которое вы могли бы связать с изменением свойств, тогда можно иметь UpdateEntityCommand.Затем вы можете медленно перейти к чему-то более основанному на задачах.

Другие советы

Я просто хочу быстро прокомментировать это, как только оно появилось.

Важно отметить, что некоторые объекты на самом деле являются CRUD, и это нормально.Возможно, меня не особо волнует, почему имя меняется в моем домене, где я отправляю продукты людям, и эти данные нужны только для печати почтовых этикеток.Хитрость заключается в том, чтобы сделать поведение по умолчанию, а затем вернуться к интерфейсу CRUD, как только вы убедитесь, что причины вас действительно не волнуют, а не наоборот.

Грег

CustomerHasMoved — это событие, которое запускается после обновления местоположения клиентов.Это событие обновляет базы данных чтения/кэша.Команда из графического интерфейса должна быть MoveCustomer или что-то в этом роде.Я думаю, что я бы поместил обновление имени клиента в команду типа UpdateCustomer.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top