加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – rails-observers vs wisper gem

发布时间:2020-12-17 03:29:34 所属栏目:百科 来源:网络整理
导读:rails-observers 使用 wisper 宝石有什么好处吗? 他们乍一看看起来非常相似,但是社区似乎更加支持Wisper(基于GH明星,提交和发布).它们之间是否存在显着差异? 解决方法 Rails观察者遇到与ActiveRecord回调相同的问题,主要是他们无法关闭.使用ActiveRecord回
rails-observers使用 wisper宝石有什么好处吗?

他们乍一看看起来非常相似,但是社区似乎更加支持Wisper(基于GH明星,提交和发布).它们之间是否存在显着差异?

解决方法

Rails观察者遇到与ActiveRecord回调相同的问题,主要是他们无法关闭.使用ActiveRecord回调,您永远将模型耦合到回调中引用的任何内容,并且回调中发生的任何副作用总是在所有情况下发生.使用观察者只会真正解决问题.

如果我们想在我们今天没有预见的上下文中使用我们的模型,我们不希望观察者回调发生怎么办?

If you search StackOverflow for “Rails callbacks”,a large number of
the results pertain to seeking means to avoid issuing the callback in
certain contexts. It almost seems as though Rails developers discover
a need to avoid callbacks as soon as they discover their existence.

ref:http://samuelmullen.com/2013/05/the-problem-with-rails-callbacks/

Wisper(免责声明,此处作者)允许发布者(例如模型)在发生重大事件时广播事件.监听器在运行时订阅发布者.出版商和订阅者对彼此一无所知.它们不依赖于彼此,而只依赖于事件.

我们的系统必然会在对象之间存在依赖关系,需要进行通信.但是,我们希望这种依赖关系尽可能轻,以便将来可以在我们目前无法预见的不同环境中使用对象.有关轻/硬依赖性的示例,请参见Connascence.

使用Wisper,在不同的上下文中,您可以选择是否订阅听众.

例如,在控制器中,我可能会订阅一些监听器,但在我的单元测试中,我可能想要测试模型隔离,而不会发生这些副作用.另一个例子可能是rake任务,我想保存模型,但不希望发生某些副作用.或者是一个管理员控制器,我在那里/不想要在其他环境中应该/不应该发生的事情.

最后Wisper有built-in support用于异步广播事件,观察者没有,它们总是同步的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读