Ruby类与公共方法

时间:2015-12-11 09:25:25

标签: ruby class-design

我有一个带有公共方法的类,例如:

class CsvParse
  def initialize(csv_file)
    @csv_file = csv_file
  end
  def parse
    ...
  end
end

csv_parse = CsvParse.new('csv_file.csv')
csv_parse.parse

但是班级的设计也可以这样:

class CsvParse
  def initialize(csv_file)
    @csv_file = csv_file
    parse
  end

  private
  def parse
    ...
  end
end

csv_parse = CsvParse.new('csv_file.csv')

最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

在这种特殊情况下,有一个暴露的辅助方法,它将文件解析为它的csv表示(无论它是什么。)

语义上最好的呼叫是:

csv_parse = CsvParser.parse 'csv_file.csv'

所以,我会声明构造函数private,防止直接创建这些对象:

class CsvParser
  def initialize ...
  end
  private_class_method :new

  def self.parse *args
    CsvParser.send(:new, *args).send(:parse)
  end
private
  def parse ...
end 

答案 1 :(得分:0)

通常你不应该在初始化时开始解析 - 根据单一责任原则,一个方法应该做一件事。