【问题标题】:Is there a benefit to create a helper method for only one use?创建仅用于一次用途的辅助方法是否有好处?
【发布时间】: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


【解决方案1】:

您所写的内容很好,但在 ruby​​ on rails 中,有一些流程需要遵循,您可以自行选择是否遵循。

我们使用助手的原因如下。

  1. 在应用程序中组织好代码。
  2. 使用 DRY 概念,这样,如果需要相同的辅助方法,可以由多个方法或操作使用。

希望明确在 ruby​​ on rails 应用程序中使用帮助程序的目的。

感谢和问候 硬化剂

【讨论】:

  • DRY 在这里不适用,因为它只使用一次。就要遵循的流程而言,您所说的流程是什么?我仍然没有看到抽象的任何意义,特别是因为它需要更多的代码行,而不是更少。
【解决方案2】:

创建辅助方法(或与此相关的任何方法)有两个正当理由:

  1. 让一段代码可重用
  2. 让任何阅读代码的人都清楚代码的用途

我认为两者本身都是有效的。您应该问问自己,创建辅助方法是否会增加应用程序逻辑的清晰度,并使任何人(甚至您)更容易理解正在发生的事情。如果是这样的话,我认为创建一个只会使用一次的助手就可以了。

在大型应用程序中,我发现清晰度通常比几行额外的代码更重要。以后有人甚至可能会发现它的其他用途。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多