CQRS: как вы получаете информацию о выполненной команде? - PullRequest
4 голосов
/ 29 ноября 2011

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

Рассмотрим следующий пример:

у вас есть команда, и вы создаете экран, на котором вы можете добавлять участников в свою команду. Члены команды показаны в сетке под материалом «Добавить нового участника». Теперь, когда вы нажимаете «добавить нового участника», вы хотите запустить какой-нибудь jquery / roundohuse / что угодно и добавить нового участника в список членов команды. Пока проблем нет, но вы также хотите включить некоторые идентификационные данные в скрытое поле для каждого участника, и эти id-данные поступают с сервера.

Итак, проблема в том, как мне получить эти id-данные с сервера? Команда «AddNewTeamMember», которую я проталкиваю через метод «ExecuteCommand», не дает мне ничего полезного, и если я добавлю новый метод запроса в службу, говорящий что-то вроде: «GetLastAddedTeamMember», то я могу просто получить последнюю запись добавлены кем-то другим (по крайней мере, если это данные, которые очень агрессивно добавляются разными пользователями). В некоторых ситуациях у вас есть естественный уникальный идентификатор, сгенерированный на стороне клиента, который мы можем использовать, но для членов команды мы этого не сделали.

Ответы [ 2 ]

3 голосов
/ 30 ноября 2011

Учитывая, что у вас нет выбора, кроме как обновить виджет на странице после завершения другой команды, я вижу два варианта для вас:

  1. Отключите команду, отобразите что-то локально, что указывает на ее отправку, и затем подождите, пока вы не получите уведомление от сервера, что список членов команды изменился. Обновите виджет, чтобы отразить это.

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

Я бы предложил первый подход, в котором «предварительный индикатор» мог бы создать отмеченную версию нормального индикатора; затем, когда вы, наконец, получите обновление, у вас должны быть необходимые данные.

Учитывая, что вы решили использовать CQRS для решения этой проблемы, я предполагаю, что вы часто обновляете содержимое этих виджетов, уже работающих в фоновом режиме, поэтому, вероятно, удалось решить проблему "фонового обновления".

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

0 голосов
/ 29 ноября 2011

Если вы хотите добавить существующего члена команды, вам следует запросить данные в стороне приложения для чтения.Если вам нужно добавить нового члена команды, вам нужно подумать, нужно ли сразу показывать пользователя в сетке ниже.Можете ли вы подождать, пока член команды не окажется на стороне чтения?Вы также можете запросить службу на стороне сервера, чтобы получить уникальный идентификатор (он может вернуть GUID).Затем вы добавляете члена команды в таблицу и, конечно, отправляете команду на сервер.Но, если это возможно, попытайтесь спроектировать приложение так, чтобы вам не приходилось сразу показывать члену команды.Также возможно дать пользователю сообщение, в котором говорится что-то вроде этого: «Член команды добавлен, ждет ответа от сервера».Затем используйте AJAX для запроса стороны чтения для новых членов команды.Когда он появится на стороне чтения, покажите его в сетке.Возможно, вам придется иметь дело с членами команды, добавленными другими пользователями, но имеет ли это значение?CQRS дает вам отличный способ сотрудничества с другими пользователями, поэтому, возможно, вам следует воспользоваться этим.Как я вижу это;CQRS заставляет вас думать иначе, и это не может быть плохо.

...