Я большой поклонник паттерна Observer.В нашем коде мы используем его во многих местах, чтобы отделить сервисы друг от друга.Тем не менее, я видел, что он реализован плохо во многих местах, так как есть о чем беспокоиться:
- Обработка исключений - не хочу, чтобы слушатели бросали исключения во время выполнения.
- Длительные слушатели, удерживающие основной поток
- Параллельная модификация списка слушателей, когда мы его перебираем.
Более того, мы повторяем этот код повсюду.В духе СУХОГО я хочу вынести все проблемы Уведомления в единый сервис.Какой-то псевдокод:
Interface NotificationService
// register the listener to receive notifications from this producer
registerAsListener (NotificationProducer, NotificationListener)
// Sends a notification to listeners of this producer
sendNotification (NotificationProducer, Notification)
// Sends a notification in a background thread
sendAsynchNotification (NotificationProducer, Notification)
// Listener no longer receives messages from this producer
removeListener(NotificationProducer, NotificationListener)
Мой вопрос таков: теряю ли я исходную точку паттерна наблюдателя, делая это?Я делаю ошибку, вводя другую зависимость с обеих сторон шаблона?И слушатель, и продюсер теперь будут иметь дополнительную зависимость от NotificationService.
Какие у вас взгляды?