Подтвердить что ты не робот

CQRS и CRUD экраны

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Грег

Ответ 3

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