【问题标题】:Does dependency injection exist in Rails?Rails 中是否存在依赖注入?
【发布时间】:2013-02-20 03:36:09
【问题描述】:

Rails 具有 MVC 方法这一事实是否意味着它具有依赖注入?

或者有什么原因我们不讨论 Rails 中的依赖注入?

如果 Rails 确实有依赖注入,它是由什么组成的?

【问题讨论】:

  • 这是一个很好的问题。我从阅读答案中学到了很多

标签: ruby-on-rails ruby spring dependency-injection


【解决方案1】:

IoC 是一把大锤,但 DI 每天都在 Ruby/Rails 中发生。无论何时:

def initialize(model_klass)
  @model_klass = model_klass
end

这是 DI。这种范式也用在 Rails 源代码的各个地方。例如,Railties gem 本身主要是一个 DI 引擎。您可以注入您喜欢的 ORM、各种插件配置和生成器。

依赖注入有一个大而可怕的名字,但它归结为只是通过在运行时注入依赖关系的方式来解耦类依赖关系。

你使用什么语言并不重要,只要你需要在某个地方插入行为/代码,你可能正在使用它。

【讨论】:

    【解决方案2】:

    依赖注入是一种范式,因此它存在于每一种面向对象的语言中。

    是否有 Ruby 的 DI 框架 - 检查 this question

    【讨论】:

      【解决方案3】:

      我会说你不需要红宝石这样的东西......但如果你真的想要,有些人有workarounds

      【讨论】:

        【解决方案4】:

        我在我的 Web 框架中使用这个 IoC https://github.com/alexeypetrushin/micon,大部分时间它保持隐藏状态,默默地解决了依赖项和组件初始化的问题,否则应该手动解决。

        你可以在这里http://ruby-lang.info 看到它的运行情况(这个站点由 Rad 提供支持,我的网络框架 https://github.com/alexeypetrushin/rad_core)。

        【讨论】:

          【解决方案5】:

          Ruby 通常不需要依赖注入。 Jamis Buck blogged extensively 关于原因。值得一读。

          【讨论】:

          • Jamis 真的是在说 Java 不需要经常使用笨重的 DI 框架。他并没有说在 Ruby 中没有必要——相反,在 Ruby 中可以使用 DI 来减少耦合并提高可测试性。这不是必需的。
          • 博客作者说他们确实每天都使用 DI,而不是 DI 框架。
          • 那是一篇很棒的文章。每个使用 Ruby 的人都必须阅读。
          • 投反对票。依赖注入是 ruby​​ 中的最佳实践。正如 scottburton11 所建议的那样,它允许更好的可测试性和解耦。我建议阅读Practical Object-Oriented Design in Ruby: An Agile Primer Sandi Metz 的文章,他被认为是该主题的专家。
          • 我很确定他在谈论 DI 框架在 ruby​​ 中是不必要的。 DI 是一种实践
          猜你喜欢
          • 1970-01-01
          • 2015-04-08
          • 2018-09-13
          • 2021-04-24
          • 2012-03-16
          • 2020-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多