【发布时间】:2017-10-30 18:44:20
【问题描述】:
我注意到在 Rails 教程中,作者有时会制作只使用一次的辅助方法。这让我觉得很荒谬,但在学习 ActionCable 时,我注意到 DHH 在 2 年前对 ActionCable 的介绍中做了同样的事情。所以也许有一点我错过了。只是为了说明,这里是来自 DHH 的代码。
# app/jobs/message_broadcast_job.rb
class MessageBroadcastJob < ApplicationJob
queue_as :default
def perform(message)
ActionCable.server.broadcast 'room_channel', message: render_message(message)
end
private
def render_message(message)
ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message })
end
end
现在我只需要编写类似这样的 perform 方法,而跳过辅助方法:
def perform(message)
ActionCable.server.broadcast 'room_channel', {
message: ApplicationController.renderer.render(
partial: 'messages/message',
locals: { message: message }
)
}
end
第一个结构比我的有什么好处吗?我只看到一个毫无意义的抽象。
【问题讨论】:
-
我发现第一个更容易阅读和理解。而且,首先,每种方法都只做一件事。其他人(或者,也许是未来的你)可能会欣赏更加清晰和职责分离。
-
没错,DRY 只是提取功能以分离方法的原因之一。不是唯一的原因。
-
一眼就能看出
render_message接受一个消息对象并返回一个字符串。在示例 2 中说明您的 perform 方法的作用更加困难。 -
到目前为止,cmets 似乎是个人喜好,这很好。似乎仅此而已。
标签: ruby-on-rails helpermethods