为什么人们在他们的代码中使用消息/事件总线?[已关闭]
我想你已经听说过消息/事件总线,它是系统内所有事件流动的单一位置。在计算机的主板和LAN网络中也可以找到类似的体系结构。对于主板和网络来说,这是一个很好的方法,因为它减少了电线的数量,但它对软件开发有好处吗?我们没有像电子产品那样的限制。
消息总线/事件总线最简单的实现可以是这样的:
class EventBus {
void addListener(EventBusListener l}{...}
void fireEvent(Event e) {...}
}
发布事件是使用 bus.fireEvent(event) 完成的,接收消息由 bus.addListener(listener) 启用。这种架构有时用于软件开发,例如MVP4G为GWT实现类似的消息总线。
活跃项目:
- 谷歌番石榴事件巴士
- MBassador by Benjamin Diedrichsen
- Mycila PubSub by Mathieu Carbou
- mvp4g 事件总线
- 简单的 Java 事件总线
休眠/死亡项目:
- Sun/Oracle JavaBeans InfoBus
- https://eventbus.dev.java.net/ [断开的链接]
这只是流行的Observer(监听器)模式“全局”制作 - 系统中的每个对象都可以监听每条消息,我认为这很糟糕,它打破了封装原则(每个对象都知道一切)和单一责任原则(例如,当某些对象需要一种新类型的消息时,事件总线经常需要更改,例如在Listierer类中添加新的Lister类或新方法)。
由于这些原因,我认为对于大多数软件来说,观察者模式比事件总线更好。您如何看待事件总线,它对典型应用有什么好处吗?
编辑:我不是在谈论像ESB这样的“大”企业解决方案 - 它们可能很有用(更重要的是ESB提供了很多,不仅仅是一个事件总线)。我问的是使用消息总线在“常规”Java代码中进行对象到对象连接的有用性 - 有些人这样做,请检查上面的链接。事件总线可能是电话到电话通信或计算机到计算机通信的最佳解决方案,因为网络中的每个电话(或计算机)通常可以相互通信,并且总线减少了电线的数量。但是对象很少相互通信 - 一个对象可以有多少个协作者 - 3,5?