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 に答える