скажем, две клиентские машины отзывают билет. Если один клиент вносит изменения, как лучше синхронизировать второго клиента? Очевидно, я не хочу, чтобы второй клиент перезаписывал изменения первого, но дополнительно я хочу, чтобы второй клиент обновлялся, потому что он может выполнять операцию, основанную на этом тикете, которая должна включать обновление, выполненное другой машиной.
Некоторые подходы, которые я рассмотрел:
MSMQ - наше приложение фактически использовало это, но ко времени моего приема на работу это был просто мертвый код, который больше не использовался. Я думал о том, чтобы восстановить его, но не чувствую, что MSMQ вполне предлагает ту функциональность, которую я хочу, не только для уведомления других клиентов об изменениях, но и для распространения этих изменений.
SQL Service Broker - прошло уже много времени с тех пор, как я посмотрел на это, но я точно помню, что это не тот путь, по которому я хотел идти.
Веб-сервис - вместо того, чтобы приложения каждый обращались к базе данных самостоятельно, я думаю, что иметь веб-сервис, который будет в центре ответственности за формирование бизнес-объектов и их раздачу, было бы частичным исправлением, за исключением того факта, что наши Приложение чисто оконных форм. Но наверняка есть другой способ реализовать это без необходимости реального веб-сервера?
Сокеты - я думал о том, чтобы просто создать службу Windows, которая интегрируется с нашим бизнес-объектом и использует сокеты Windows, чтобы либо: а) просто сказать другим клиентам, что им нужно вызывать базу данных для обновлений, либо б) фактически предоставить клиентам обновления поэтому им не нужно вызывать базу данных.
Для меня это новая территория, и мне неизвестны какие-либо хорошие книги или статьи, посвященные шаблонам проектирования, которые касаются этой проблемы, поэтому, пожалуйста, направьте меня к любому, если вы о них знаете.