小编Eri*_*ese的帖子

在Ruby中依赖注入的一个好习惯是什么?

我一直在阅读Sandi Metz的Ruby实用面向对象设计,以及许多在线讨论Ruby设计的网站.我很难完全理解的是实现依赖注入的正确方法.

互联网充斥着博客文章,解释了依赖注入是如何工作的,我认为这是一种非常局部的方式.

我明白这应该是坏的:

class ThisClass
  def initialize
    @another_class = AnotherClass.new
  end
end
Run Code Online (Sandbox Code Playgroud)

虽然这是一个解决方案:

class ThisClass
  def initialize(another_class)
    @another_class = another_class
  end
end
Run Code Online (Sandbox Code Playgroud)

我可以像这样发送AnotherClass.new:

this_class = ThisClass.new(AnotherClass.new)
Run Code Online (Sandbox Code Playgroud)

这是Sandi Metz至少推荐的方法.我不明白的是那条线应该去哪里?它必须走到某个地方,通常在这个示例中显示的是一条线,就像完全放在任何类,方法或模块之外的行,就好像我只是在IRB中手动输入它以进行测试.

这篇文章(以及其他)提出了这种不同的方法:

class ThisClass
  def another_class
    @another_class ||= AnotherClass.new
  end
end
Run Code Online (Sandbox Code Playgroud)

Jamis Buck将采取类似的方法:

class AnotherClass
end

class ThisClass
  def another_class_factory(class_name = AnotherClass)
    class_name.new
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,这两个例子都保留了ThisClass中的AnotherClass名称,Sandi Metz说这是我们试图避免的主要事情之一.

那么这样做的最佳做法是什么?我是否应该在应用程序中创建一个"依赖"模块,其中包含作为每个类的对象的工厂的方法?

ruby oop dependency-injection

7
推荐指数
1
解决办法
2473
查看次数

标签 统计

dependency-injection ×1

oop ×1

ruby ×1