Пользовательский интерфейс задачи CQRS - реагирование на основные изменения - PullRequest
1 голос
/ 15 декабря 2011

Перешел в какой-то ориентированный на задачи пользовательский интерфейс как часть моей реализации CQRS.

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

Мой случай другой, но вот пример ... например. CommandA Добавление товара в корзину привело к следующим событиям (которые все должны быть отражены в пользовательском интерфейсе)

  • перейти в инвентарь магазина
  • добавить товар в корзину
  • изменить сумму с налогом с продаж

Какой лучший способ справиться с этим, не вставляя мою бизнес-логику в мой интерфейс?

  • вернуть список результирующих событий, которые были выполнены в результате, исходной команде?
  • возвращает DTO, отражающее изменения
  • другие идеи?

Ответы [ 2 ]

1 голос
/ 17 декабря 2011

Действительно ли эти события должны быть отражены в пользовательском интерфейсе?Рассмотрим Amazon, который отображает «вы только что добавили foo в корзину», но не показывает никаких других деталей.Это может избавить вас от проблемы, переопределив ее.

В противном случае, почему вы боитесь бизнес-логики в «пользовательском интерфейсе», в частности, почему бы не включить некоторые компоненты из службы, которой принадлежит каждая часть этой системы?в вашем клиенте и дать им ответственность за выполнение любых локальных обновлений?

Другими словами, хорошо бы иметь часть логики из вашей налоговой службы, работающей в пользовательском интерфейсе.Вы (очевидно) не доверяете ему расчеты счетов по налогам, но вы можете полностью доверять этому, чтобы делать правильные вещи для клиента.

Другое преимущество этой модели заключается в том, что вы получаете мгновенную обратную связь дляпользователь или, по крайней мере, возможность отображения мгновенной обратной связи, без внесения дополнительных знаний о бизнес-процессах в клиент.

Например, для пересчета доставки требуется время - если ваш клиент показываетВдобавок ко всему, что-то нужно знать, чтобы вызвать это появление, верно?

Если ваш пользовательский интерфейс знает это, он встроил бизнес-процесс в процесс.С другой стороны, если у вас есть код, который является частью службы «доставки», вы можете изменить ответ, который происходит в клиенте, изменив только одну службу ...

1 голос
/ 15 декабря 2011

Я еще не закончил, но моя идея состоит в том, чтобы использовать концентратор из среды SignalR, подписаться на события и действовать в соответствии с ними.Пока вы можете соотносить руководства пользователя с подключенными руководствами пользователя в SignalR, вы можете отправлять обновления нужному клиенту и даже определять, есть ли они там.Я сделал это довольно хорошо.

Я использую его с Knockoutjs и просто обновляю свои модели представлений и вызываю функции.

...