Я ищу руководство по дизайну здесь больше, чем реальные решения, но приветствую оба.
Сценарий состоит в том, что у меня есть издатель, который отвечает за публикацию пользовательских обновлений, выполняемых в системе. Мои нисходящие системы являются подписчиками этих обновлений.
Проблема, с которой я сталкиваюсь, заключается в том, что пользователи вышестоящей системы регулярно сохраняют свою работу. Причина, по которой они это делают, заключается в том, что одно «логическое» обновление на самом деле включает в себя переход многих экранов, плюс для них также вполне естественно многозадачность в других вещах, и поэтому они нажимают «сохранить» много. Каждый раз, когда они нажимают «Сохранить», мы получаем сообщение.
Итак, для каждого «логического» обновления у нас может быть 5-10 отдельных сообщений об обновлениях, некоторые из которых могут быть продублированы.
Это приводит к накладным расходам для пользователей моих нижестоящих систем, которые перегружены объемом обновлений. Для каждого обновления они должны сначала проверить, представляет ли это «действенную» часть работы, и отменить ее, если это только результат восходящего сохранения.
Я знаю, что лучшим решением было бы изменить исходную систему для объединения сохранений в одно обновление, но это было бы слишком дорого, поскольку для этого потребовалось бы привлечь поставщика.
Редактировать: В сообщениях отсутствуют данные о последовательности. Поэтому, когда мы получаем обновление, нет никакого способа сказать, насколько «далеко» прошел процесс пользователь. Они могли бы закончить все это за один раз, или они могли бы пройти только 10%, и мы получим еще 10 обновлений, прежде чем они будут закончены.
Редактировать: В частности, я использую BizTalk в качестве платформы обмена сообщениями.
Редактировать: Шаблон, который я хочу реализовать, - это Агрегатор - http://eaipatterns.com/Aggregator.html. Проблема в том, что у меня нет возможности узнать, завершена ли серия сообщений, которые содержат ввод, или нет.