.net事件总线开发案例_我的事件总线案例

.net事件总线开发案例

注意:由于我本周参加了Joker会议 ,因此我必须在“以微服务方式发展”系列中稍作休息。 但是,希望您亲爱的读者仍然喜欢这篇文章。

与咖啡机旁的同事进行非正式的交谈是提高开发人员技能的好方法。 大多数时候,人们不同意,这是学习上下文思考的好方法。 最新主题之一是关于事件总线。 尽管没有Android开发人员,但我是移动团队的一员,该团队使用事件总线在应用程序的不同组件之间调度事件。 令人惊讶的是(至少对我而言),一个团队成员“不喜欢Event Bus”。 碰巧的是,几天后我才刚读完这篇文章

我想为事件总线辩护是我的提示。

有多种实现消息传递的抽象,想到的第一个可能是观察者模式。 您可以在各种UI框架(例如AWT,Swing,Vaadin)中实现它。 尽管它将调用者的责任从订阅者( 也称为观察者)转换为观察者( 也称为主题),但这种模式有一个很大的缺点:为了使订阅者收到有关观察者事件触发的通知,观察者必须持有对集合的引用的订阅者。 尽管不是通常意义上的,但这直接转化为它们之间的强耦合

观察者设计模式类图

为了减少耦合,通常的解决方案是在两者之间插入第三方组件。 您知道我要去哪里:该组件是事件总线。 现在,观察者无需注册到主题,而是注册到事件总线,并且主题将事件发布到事件总线。

事件总线类图

现在,主题和观察者之间的耦合已替换为主题和事件总线之间的耦合:Observable不需要实现以订户类型作为参数的register()方法。 因此,事件可以来自任何来源,并且该来源可以及时更改,而订阅者则无需进行任何重构。

在Java世界中,我知道3种不同的实现事件总线的库:

在最近的两个中, notify()方法的实现被注释的使用代替,而在前者中,它基于一个已达成共识的方法签名( onEvent(Event<T>) )。 因此,可以通知任何类型,而无需实现Observer接口,从而进一步减少了耦合。

带注释类图的事件总线

最后,所有这些实现都提供了一种以事件的形式传递额外有效负载的方法。 这是最终的设计:

事件总线有效负载类图

这种设计的优点是多方面的:

  • 无需在代码片段中同时引用Subscriber和Observable即可使后者注册前者
  • 无需实现Observer接口
  • 能够传递额外的有效载荷
  • 多对多关系:一个订阅者可以订阅不同的事件,一个可观察者可以发送不同类型的事件

唯一的问题是事件的发布顺序,但这可能是一个问题,具体取决于您的上下文。 在这种情况下,传统的耦合方法调用方法更适合。 在所有其他情况下-特别是在用户界面层中,甚至在使用真正的图形组件(AWT,Swing,Android,Vaadin等)进行设计时,您都应该充分利用Event Bus的所有优点。

例如,这是一篇有关将Guava Event Bus与Vaadin集成在一起的旧文章 ,但仍然很相关。

翻译自: https://blog.frankel.ch/my-case-for-event-bus/

.net事件总线开发案例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3.x移除了事件总线的概念,不再提供全局的事件总线对象。以前的版本中,我们可以使用Vue实例的`$on`、`$emit`、`$off`和`$once`方法来实现事件的绑定、触发和解绑。但是在Vue3.x中,这些方法已经从实例中移除了。相反,Vue3.x推荐使用其他的事件管理库,比如mitt或者event bus。mitt是一个小巧且高效的事件管理库,可以帮助我们在组件之间进行事件的订阅、发布和取消订阅操作。你可以通过`npm install --save mitt`或者`yarn add mitt -S`安装mitt模块。另一种方式是使用event bus模式,通过创建一个全局的事件总线对象来实现组件之间的通信。你可以在主文件中创建一个新的Vue实例,并将其作为事件总线对象导出,然后在其他组件中导入并使用该事件总线对象来进行事件的订阅和触发。总之,Vue3.x移除了事件总线的概念,但我们仍然可以使用其他的事件管理库或者自己创建一个全局的事件总线对象来实现类似的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue3.0事件总线](https://blog.csdn.net/weixin_49666910/article/details/114252178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [计算机程序设计语言课程设计(VUE.js)及实践项目的例子.txt](https://download.csdn.net/download/weixin_44609920/88236928)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值