当前位置: 首页 > 面试题库 >

人们为什么在他们的代码中使用消息/事件总线?

陈欣荣
2023-03-14
问题内容

我认为您听说过消息/事件总线,它是系统中所有事件都在流动的唯一场所。在计算机的主板和LAN网络中可以找到类似的体系结构。对于主板和网络而言,这是一种很好的方法,因为它可以减少导线数量,但是对软件开发有好处吗?我们没有电子产品那样的限制。

消息总线/事件总线的最简单实现如下:

class EventBus {
    void addListener(EventBusListener l}{...}
    void fireEvent(Event e) {...}
}

发布事件是通过bus.fireEvent(event)完成的,接收消息是通过bus.addListener(listener)启用的。这种体系结构有时用于软件开发,例如MVP4G为GWT实现了类似的消息总线。

休眠/死项目:

  • Sun / Oracle JavaBeans InfoBus
  • https://eventbus.dev.java.net/ [断开的链接]

这只是流行的“全局”观察器(侦听器)模式-
系统中的每个对象都可以侦听每条消息,我认为这很糟糕,它破坏了封装原则(每个对象都了解所有内容)和单一职责原则(例如,当一些对象需要一种新型的消息,通常需要更改事件总线,例如在侦听器类中添加新的侦听器类或新方法。

基于这些原因,我认为对于大多数软件来说,观察者模式要比事件总线更好。您如何看待事件总线,它对典型应用程序有什么意义?

编辑:我不是在谈论像ESB这样的“大型”企业解决方案-它们可能很有用(ESB所提供的不仅仅是事件总线,还有更多的东西)。我问的是在“常规”Java代码中使用消息总线进行对象到对象的连接是否有用-
有些人这样做了,请检查上面的链接。事件总线可能是电话到电话通信或计算机到计算机通信的最佳解决方案,因为网络中的每个Telefone(或计算机)通常可以相互通信,并且总线减少了电线数量。但是对象很少互相交谈-
一个对象可以有多少个协作者-3、5?


问题答案:

有些人喜欢它,因为它是Facade模式或Mediator模式的体现。它集中了诸如日志记录,警报,监视,安全性等跨领域活动。

有些人不喜欢它,因为它通常是一个Singleton故障点。每个人都必须知道。



 类似资料:
  • 问题内容: 在Java中,要创建并显示一个new ,我只需执行以下操作: 但是,我已经看到很多人这样做: 为什么?有什么好处吗? 问题答案: 在Java的生命周期中,用于控制需要在EDT上执行什么操作的规则(我看到的是“ EDT”比“事件队列”更常用)。而且每次“规则”更改时,Sun建议在EDT上进行越来越多的“ GUI相关”工作。 人们为什么在EDT上运行Java GUI? 因为官方指南建议这样

  • 问题内容: 有什么用的,并在Hibernate?因为我在互联网上发现的每个示例都将数据插入到单个表中,并使用两个不同的类来做到这一点。我的观点是,如果我使用单个表,那么我可以在单个类中映射所有列,那么为什么要使用不同的类。如果我们使用两个不同的表,则存在和hibernate关系。 问题答案: Hibernate 1中有两种对象。Value Object2 。实体 价值对象 是不能独立存在的对象。以

  • 我们为什么使用: 而不是: ?

  • 问题内容: 从Java 5开始,我们已经对原始类型进行装箱/拆箱,因此将其包装为,依此类推。 我最近看到许多新的Java项目(肯定要求JRE的版本至少为5,如果不是6的话)正在使用int而不是,尽管使用后者要方便得多,因为它具有一些用于转换的辅助方法到long的值等。 为什么有些人仍然在Java中使用原始类型?有什么切实的好处吗? 问题答案: 在Joshua Bloch的有效Java条款 5:“避

  • 问题内容: 我正在构建一个小型应用程序,并在表之间建立外键关系。但是我对为什么我真的需要这个感到困惑?有什么好处- 在编写不需要执行任何联接的查询时,它对我有帮助吗?这是我的数据库的示例片段: 两者之间存在关键关系。和。 我可以执行这样的查询吗? 既然MySQL应该知道表之间的关系?如果不是,那么外键在数据库设计中的真正功能是什么? 问题答案: 外键提供引用完整性。外键列中的数据经过验证-该值只能

  • 问题内容: 因此,每本Java教科书都讨论Java的灵活性,因为Java可以在运行时加载类。只需将字符串拼凑在一起,然后交给,然后抓住并处理即可。理论上就这么多。 您能否举例说明如何使用Java类加载来实现原本不可能或不容易的功能?请注意,我 不是 问“有什么伟大的事情 可以 做什么?” -我正在寻找真实的示例,它是一个开源应用程序,或者-如果您可以在不给出过多细节的情况下进行描述-一个专有应用程