gpt4 book ai didi

ruby - 是否有更 ruby​​ 惯用的方法来删除可配置对象依赖项的创建?

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

我正在尝试清理一些旧代码、删除依赖项并使其更易于测试。

当我发现如下情况时,在方法中创建参数化对象。例如在这段代码中:

class Bar
def initialize parameter
@parameter = parameter
end
end

class Foo
def initialize some_parameter
@some_parameter = some_parameter
end
def some_method
...
...
bar = Bar.new parameter ## here is the dependency I would like to remove
...
end
end

我一直在创建一个工厂类并将其注入(inject)构造函数,然后使用它来创建实例,如下所示:

class Bar
def initialize parameter
@parameter = parameter
end
end

class BarFactory
def create parameter
Bar.new parameter
end
end

class Foo
attr_reader :bar_factory
def initialize some_parameter, bar_factory: nil
@bar_factory = bar_factory || BarFactory.new
@some_parameter = some_parameter
end
def some_method
...
...
bar = bar_factory.create parameter
...
end
end

我认为这是一个改进,因为我可以注入(inject)不同的工厂进行测试,或者在将来需要时注入(inject)不同的工厂。但由于我发现自己更经常这样做,我想知道我是否陷入了某种反模式,或者是否有更符合 ruby​​ 惯用方式的方法来做同样的事情?

我在这方面所做的大部分研究通常都是将依赖项注入(inject)构造函数,这就是我在这里所做的,但在这种情况下,我注入(inject)的是一个工厂而不是一个简单的对象。

最佳答案

我没有看到在 Ruby 中拥有专用工厂类有任何好处,即它有 Java 风格模式的味道(解决类不是那里的一流对象的事实)。你为什么不简单地:

class Bar
def initialize parameter
@parameter = parameter
end
end

class Foo
attr_reader :barlike_class
def initialize some_parameter, barlike_class: Bar
@barlike_class = barlike_class
@some_parameter = some_parameter
end
def some_method
...
...
bar = barlike_class.new parameter
...
end
end

关于ruby - 是否有更 ruby​​ 惯用的方法来删除可配置对象依赖项的创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486803/

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