【发布时间】:2012-01-25 09:50:17
【问题描述】:
我正在阅读Rails AntiPatterns 这本书,我非常喜欢。有一次,作者谈到了组合的好处,并举了一个例子,其中 Order 类负责将(转换为其他格式)到另一个类,称为 OrderConverter。类定义为:
class Order < ActiveRecord::Base
def converter
OrderConverter.new(self)
end
end
class OrderConverter
attr_reader :order
def initialize(order)
@order = order
end
def to_xml
# ...
end
def to_json
# ...
end
...
end
然后作者说:“通过这种方式,您可以在一个单独且易于测试的类中为转换方法提供自己的家。导出订单的 PDF 版本现在只需调用如下:"
@order.converter.to_pdf
关于这个,我的问题是:
-
为什么你认为 order 对象前面有一个 @?它不应该被创建为:
order = Order.new
然后通过做转换:
order.converter.to_pdf
- 为什么 OrderConverter 中需要
attr_reader :order行?这样我们就可以从 OrderConverter 对象访问订单了吗?是否需要能够做到order.converter.to_pdf?没有那个 attr_reader 我们可以做到这一点,对吗?
【问题讨论】:
标签: ruby-on-rails composition anti-patterns