在类中使用ruby attr_readers(而不是仅使用实例变量)



我正在构建一个系统,该系统使用许多小类来进行数据处理(每个类都执行不同的处理步骤,类似于nice&SRP)。我用一些参数初始化每个类,然后在类上调用execute()方法,然后使用其他私有方法进行一些数据计算。

我的问题是:如果我没有访问类之外的任何参数,我应该只使用私有方法中的实例变量吗?或者定义一个attr_reader?

例如,这里有一点我即兴创作的代码:

class Car
  attr_reader :make
  def initialize(make, model)
    @make = make
    @model = model
  end
  def execute
    apply_paint
    rotate_tires
  end
  private
  def apply_paint
    if make == "Toyota"
      Painter.paint(self, "red")
    else
      Painter.paint(self, "green")
    end
  end
  def rotate_tires
    if @model == "Sequoia"
      set_tire_size(:large)
    else
      set_tire_size(:normal)
    end
  end
end

那么,哪一个更好呢?我是如何处理"制造"或"模型"的?

如果我知道我根本没有在这个类之外使用这两个变量,我应该只使用实例变量吗?或者使用attr_reader更好,因为这样我就可以将它们转换为实际的方法,而无需更改其余的代码。。。即,由于apply_paint使用make而不是@make,如果需要,我可以将make更改为本地方法,而不更改apply_paint方法。

我一直在东拉西扯,不知道哪一个更好。也许这只是一种偏好,但我想看看其他人对这个问题有什么想法。

使用attr_方法。如果你没有在类外访问它们,你可以(也可能应该)将它们设为私有。为什么要使用它们?您可以通过说明您对如何使用它的意图来提高可读性。attr_reader应被解释为"此变量只应被读取"。

相关内容

  • 没有找到相关文章

最新更新