ruby oo设计问题我应该重新打开课程还是使用扩展模式

时间:2011-02-12 10:49:04

标签: ruby design-patterns oop

所以我有一个ruby对象,我需要创建一个pdf和excel行和cvs行

到目前为止,我已经创建了一个新类,其中包含一个方法来接收对象并执行必要的操作来生成pdf,excel,csv

我一直在阅读敏捷软件开发,原理,模式和实践,它提到了扩展方法,所以我打算做但是因为这是ruby应该我只是在另一个文件中重新打开类并添加方法在那里将他们与主类分开

所以

文件ruby_model.rb

class RubyModel < ActiveRecord::Base

end

然后做

ruby​​_model_pdf.rb

class RubyModel

  def to_pdf
  end
end

ruby​​_model_cvs.rb

class RubyModel

  def to_csv
  end

end

或者我应该使用对象扩展模式吗?

干杯

2 个答案:

答案 0 :(得分:1)

您应该将您的方法放在一个模块中,并将该模块包含在类中。这种方式更可取,因为它更容易看到方法的来源(例如,在回溯中),并且如果事实证明它们也可以在其他类中使用,则更容易重用这些方法。

例如:

module Conversions
  def to_pdf
  end
  def to_csv
  end
end

class RubyModel
  include Conversions
end

to_pdfto_csv放在不同的模块中可能也是一个好主意,除非你想要混合使用另一个模块,否则你总是希望混合使用另一个模块。

这一切都假定这些方法不属于类本身,而是根据它们不属于的名称来判断。

答案 1 :(得分:0)

如果语言功能正常,请保持简单并使用它。

设计模式是文档的解决方法,适用于语言不够表达的情况。 Ruby示例是Iterator,它由块和Enumerable制成冗余。