Ruby on rails 将整个参数作为参数传递给方法是一个坏习惯?

Ruby on rails 将整个参数作为参数传递给方法是一个坏习惯?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我担心的是 控制员关注事项: module User extend ActiveSupport::Concern def abc(params) ... end end 现在我从我的控制器调用这个abc方法 控制器: class UserController < AdminController ... user = abc(params) ... end class UserController

我担心的是

控制员关注事项:

module User
  extend ActiveSupport::Concern

  def abc(params)
    ...
  end
end
现在我从我的控制器调用这个
abc
方法

控制器:

  class UserController < AdminController
    ...
    user = abc(params)
    ...
  end
class UserController

那么,将整个参数从我的控制器传递到abc方法是一个坏习惯吗?

是的,这是一个坏习惯,因为在该方法中,通常不需要整个
参数。你只需要它的几把钥匙,但无论如何你都可以通过它,让你的生活更轻松

然而,这样做会让你以后的生活更加艰难。当需要重新访问/重构此方法时,您实际使用的
params
是什么并不明显。您必须分析方法中的所有代码路径。这是不必要的工作

甚至忘记重构吧。每次调用该方法时都必须执行此操作

例如,比较这两种调用

User.abc(params)


以下哪项看起来更“易于管理”

谢谢@Sergio。但是,假设我的参数包含5个键,其中我在abc方法中使用了4个键,我仍然应该单独传递这些键,或者在那个时候传递整个参数可以吗?@DaZedMiNaZGamernanimelover:如果你传递整个东西,这会给你的代码的未来读者传达什么信息?我想它说的是“我使用所有的
参数”。而且也没有给读者一点关于实际需要什么键的想法。请记住,代码只编写一次,但之后会被读取一千次。优化可读性。如果有很多键,您可以像
User.abc(params.slice(:id,:email,:foo,:bar))一样传递它。
。这是非常干净的。@ DaZeDimaZGAMNAMEngEnLIFOF如果您有很多参数,或者如果参数顺序/存在不相关,则应该考虑使用关键字参数。实际上,在这种情况下,应该使用关键字参数而不是序号参数。如果一个方法中有一堆没有逻辑顺序的序数参数,那么这个方法实际上更糟糕,因为你每次都要查找这个方法。你必须传递它吗?我以为控制器关注点可以访问
params
@Stefan:啊,这确实是一个关注点。尽管如此,我还是倾向于显式地传递参数,即使数据可以作为同一实例上的方法访问。使此方法更“纯”。@SergioTulentsev我会让控制器/关注点处理params内容,并将“纯”方法移动到相应的模型(或服务对象,如果它太重)。
User.abc(params[:id], params[:email])