gpt4 book ai didi

ruby-on-rails - Rails Observer 4.0 的替代方案

转载 作者:行者123 更新时间:2023-12-03 04:22:32 24 4
gpt4 key购买 nike

正式与观察员removed from Rails 4.0 ,我很好奇其他开发人员在他们的位置使用什么。 (除了使用提取的 gem 之外。)虽然观察者肯定被滥用并且有时很容易变得笨拙,但除了缓存清除之外,还有许多有用的用例。

以需要跟踪模型更改的应用程序为例。观察者可以轻松地监视模型 A 上的更改,并将模型 B 的这些更改记录在数据库中。如果您想观察多个模型的变化,那么单个观察者就可以处理这个问题。

在 Rails 4 中,我很好奇其他开发人员使用什么策略来代替观察者来重新创建该功能。

就我个人而言,我倾向于一种“胖 Controller ”实现,其中在每个模型 Controller 的创建/更新/删除方法中跟踪这些更改。虽然它稍微夸大了每个 Controller 的行为,但它确实有助于提高可读性和理解性,因为所有代码都位于一个位置。缺点是现在非常相似的代码分散在多个 Controller 中。将该代码提取到辅助方法中是一种选择,但您仍然需要调用散布在各处的这些方法。这不是世界末日,但也不完全符合“瘦 Controller ”的精神。

ActiveRecord 回调是另一种可能的选择,尽管我个人不喜欢这种选择,因为在我看来,它往往会将两个不同的模型过于紧密地结合在一起。

因此,在 Rails 4 的无观察者世界中,如果您必须在创建/更新/销毁另一条记录后创建一条新记录,您会使用什么设计模式?胖 Controller 、ActiveRecord 回调还是其他什么?

谢谢。

最佳答案

看看Concerns

在模型目录中创建一个名为关注点的文件夹。在那里添加一个模块:

module MyConcernModule
extend ActiveSupport::Concern

included do
after_save :do_something
end

def do_something
...
end
end

接下来,将其包含在您希望运行 after_save 的模型中:

class MyModel < ActiveRecord::Base
include MyConcernModule
end

根据您正在做的事情,这可能会让您在没有观察者的情况下接近。

关于ruby-on-rails - Rails Observer 4.0 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com