gpt4 book ai didi

ruby-on-rails - "The Ruby way"(mixins 和类重新打开)与依赖注入(inject)

转载 作者:数据小太阳 更新时间:2023-10-29 06:33:28 26 4
gpt4 key购买 nike

在研究混合与依赖注入(inject)时,我经常听到“Ruby 方式”这个词。开发人员通常会说一些类似的话

Ruby lets you reopen classes and redefine methods means that you can easily "inject" new references into your code at test-time.

(参见 http://weblog.jamisbuck.org/2007/7/29/net-ssh-revisited 的 #6)

但是测试不是我主要关心的;我关心的是类重用。我想要可以在多个企业级 Rails 应用程序中重用的类。

那么重用类发生了什么?使用 mixins 和重新打开类似乎并没有提供一种方法来编写类,使它们与特定于应用程序的细节分离而无需大量额外工作。但也许我错了。如果是,有人可以提供指向包含示例代码的文章的链接,该示例代码清楚地解释了如何使用 mixin 和重新打开类来正确完成此操作吗?

例如,这里的类 Foo 耦合到类 Logger:

class Foo
def initialize
@logger = new_logger
end

def new_logger
Logger.new
end
end

是的,我可以重新打开 Foo 并重新定义 new_logger,但我无法相信这被认为是编写可由多个 Rails 应用程序使用的可重用类的现实、标准方法。

最佳答案

实际上,当我从 Java 世界来到 Ruby 世界时,我首先感兴趣的是它们如何管理依赖项。那时我在所有 Java 项目中都使用 Google Guice,它巧妙的设计和易用性让我深受启发。我在 ruby​​ 中做的第一件事是我自己的 DI 容器,它具有与 Google Guice 大致相同的一组功能 -(it is still here on github 但它非常过时)。

但现在,在使用 Rails/Ruby 工作 2 年后,我认为这里不需要 DI。关于 ruby​​ 中 DI 的好文章是 http://weblog.jamisbuck.org/2008/11/9/legos-play-doh-and-programming它实际上是一篇关于为什么第一个 ruby DI 容器的作者不需要 DI 的文章。这绝对值得一读。

关于ruby-on-rails - "The Ruby way"(mixins 和类重新打开)与依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com