4

我正在尝试了解 Ruby/Rails 中的依赖注入。如何删除对使用依赖注入Builder的显式引用?Saw

class Builder
  attr_reader :saw

  def saw
    @saw ||= Saw.new(4)
  end

  def cut_wood
    Saw.saw
  end
end

class Saw
  attr_reader :blades

  def initialize(blades)
    @blades = blades
  end

  def saw
    # do something
  end
end
4

2 回答 2

4

将初始化移动Saw到默认参数。

class Builder   
  def saw(saw = Saw.new(4))
    @saw = saw
  end

  def cut_wood
    Saw.saw
  end
end

Builder#saw现在支持依赖注入。

请记住attr_reader :saw从您的代码中删除,因为它已被您的自定义阅读器覆盖。

于 2013-08-19T10:00:16.447 回答
3
class Builder

  def initialize(saw=Saw.new(4))
    @saw = saw
  end

  def cut_wood
    @saw.saw
  end
end

# Use it
b = Builder.new
b.saw

another_saw = AnotherSaw.new
b = Builder.new(another_saw)
b.saw

您通过默认锯初始化 Builder 实例。因此,您可以使用默认的,也可以使用自己的。这样你就可以将 Saw 与 Builder 分离。

顺便说一句,我不知道hammer是为了所以我没有写它。在您的代码中,它看起来只不过是一个 attr 阅读器。

我也不需要,attr_read :saw所以我删除了它。

于 2013-08-19T10:00:29.253 回答