ruby-on-rails – rails-observers vs wisper gem
rails-observers 使用
wisper 宝石有什么好处吗?
他们乍一看看起来非常相似,但是社区似乎更加支持Wisper(基于GH明星,提交和发布).它们之间是否存在显着差异? 解决方法
Rails观察者遇到与ActiveRecord回调相同的问题,主要是他们无法关闭.使用ActiveRecord回调,您永远将模型耦合到回调中引用的任何内容,并且回调中发生的任何副作用总是在所有情况下发生.使用观察者只会真正解决问题.
如果我们想在我们今天没有预见的上下文中使用我们的模型,我们不希望观察者回调发生怎么办?
ref:http://samuelmullen.com/2013/05/the-problem-with-rails-callbacks/ Wisper(免责声明,此处作者)允许发布者(例如模型)在发生重大事件时广播事件.监听器在运行时订阅发布者.出版商和订阅者对彼此一无所知.它们不依赖于彼此,而只依赖于事件. 我们的系统必然会在对象之间存在依赖关系,需要进行通信.但是,我们希望这种依赖关系尽可能轻,以便将来可以在我们目前无法预见的不同环境中使用对象.有关轻/硬依赖性的示例,请参见Connascence. 使用Wisper,在不同的上下文中,您可以选择是否订阅听众. 例如,在控制器中,我可能会订阅一些监听器,但在我的单元测试中,我可能想要测试模型隔离,而不会发生这些副作用.另一个例子可能是rake任务,我想保存模型,但不希望发生某些副作用.或者是一个管理员控制器,我在那里/不想要在其他环境中应该/不应该发生的事情. 最后Wisper有built-in support用于异步广播事件,观察者没有,它们总是同步的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |