Одиночные сетевые процессоры событий в порядке? - PullRequest
0 голосов
/ 11 марта 2010

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

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

Однако, согласно большинству рассуждений о синглетах, они всегда являются злым ПЕРИОДОМ, если только из соображений параллелизма или аппаратного обеспечения вам не нужна только одна точка доступа. Это не моя ситуация, поскольку каждый компонент может иметь свою собственную подписку и свой личный кеш данных, поскольку все данные могут быть запрошены у брокера. Однако это может легко добавить еще 200 сетевых подключений.

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

1 Ответ

1 голос
/ 12 марта 2010

Нет ничего плохого в том, что клиентский объект вашего брокера обслуживает несколько клиентов в вашем процессе.

Все разговоры о том, что одиночные звуки - это зло, на самом деле глобальные переменные - зло. Синглтон становится злом, потому что он обеспечивает static точку доступа к изменяемому состоянию, а не потому, что существует только один его экземпляр.

В этом свете вы можете использовать инъекцию зависимостей для подключения вместо вызова Broker.getInstance(). Это позволяет избежать того, чтобы клиентский код делал предположение, что он на самом деле является единичным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...