Я думаю, что вы слышали о шинах сообщений/событий, это единственное место, когда все события в потоке системы. Подобные архитектуры находятся в компьютерных материнских платах и сетях LAN. Это хороший подход для материнских плат и сетей, поскольку он уменьшает количество проводов, но хорошо ли это для разработки программного обеспечения? У нас нет таких ограничений, как электроника.
Простейшая реализация шины сообщений/событийной шины может быть такой:
class EventBus {
void addListener(EventBusListener l}{...}
void fireEvent(Event e) {...}
}
События проводки выполняются с помощью bus.fireEvent(событие), принимающие сообщения включаются bus.addListener(слушателем). Такие архитектуры иногда используются для разработки программного обеспечения, например MVP4G реализует аналогичную шину сообщений для GWT.
Активные проекты:
- Google Guava EventBus
- MBassador Бенджамин Дидрихсен
- Mycila PubSub Матье Карбу
- mvp4g Event Bus
- Простая платформа событий Java
Бездействующие/мертвые проекты:
- Sun/Oracle JavaBeans InfoBus
- https://eventbus.dev.java.net/ [Неработающая ссылка]
Это просто популярный шаблон Observer (Listener), сделанный "глобально" - каждый объект в системе может прослушивать каждое сообщение, и я думаю, что это плохо, он нарушает принцип инкапсуляции (каждый объект знает обо всем) и принцип единой ответственности (например, когда какой-либо объект нуждается в сообщении нового типа, частоту передачи часто необходимо изменить, например, для добавления нового класса Listener или нового метода в классе Listener).
По этим причинам, я думаю, что для большинства программ, шаблон Observer лучше, чем шина событий. Что вы думаете о шине событий, действительно ли это имеет смысл для типичных приложений?
EDIT: Я не говорю о "больших" корпоративных решениях, таких как ESB, - они могут быть полезны (что больше ESB предлагает гораздо больше, чем просто шина событий). Я прошу о полезности использования шины сообщений в "регулярном" Java-коде для соединения "объект-объект" - некоторые люди делают это, проверяют ссылки выше. Диспетчер событий, вероятно, является лучшим решением для телефонной или телефонной связи или связи между компьютером и компьютером, поскольку каждый телефон (или компьютер) в сети обычно может разговаривать друг с другом, а шина уменьшает количество проводов. Но объекты редко общаются друг с другом - сколько соавторов может иметь один объект - 3, 5?