C # - издатель подписчик решит это? - PullRequest
2 голосов
/ 20 августа 2009

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

примечание: один человек может работать с несколькими билетами с разными сроками.

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

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

<Ч />

Мой вопрос:
Является ли шаблон Observer лучшим вариантом для уведомления службы, или другой шаблон проектирования доступен для его плавного обращения (свободной блокировки).?

Ответы [ 2 ]

3 голосов
/ 20 августа 2009

Вам нужна очередь.

В зависимости от того, как вы это реализуете, вы можете использовать

  • System.Collections.Generic.Queue , полезно для однопотоковой постановки или удаления из очереди. Вы также можете защитить его с помощью блокировки для одновременного доступа.
  • Параллельная очередь в VS10 , для множественных потоков, отправляющих и получающих
  • MSMQ из-за его возможностей организации очередей, особенно полезных при использовании распределенного проекта
  • база данных SQL Server, опять же интересная при использовании распределенного проекта

Для уведомлений, да, требуется механизм pub / sub. Опять же, там есть варианты.

2 голосов
/ 20 августа 2009

Звучит так, будто Messaging / Queuing подойдет

...