gpt4 book ai didi

ruby - 构造函数注入(inject)与 attr_writer

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:57 25 4
gpt4 key购买 nike

我需要编写具有依赖关系的类。我来自 .NET 背景,在 .NET 中,我们主要使用构造函数注入(inject)来将类依赖项注入(inject)到类中。我四处阅读,发现大多数博客(或者至少是我看过的博客)都建议使用 attr_writer(la,property)注入(inject)依赖项。

我所说的依赖性是什么意思:

class Engine
end

# A car requires an engine
class Car
attr_writer :engine #Do we use attr_writer for dependencies, or..
def initialize(engine) # Do we use constructor injection?
end
end

注入(inject)依赖的Ruby是什么? attr_writer 还是构造函数注入(inject)?

编辑:对于之前编辑我的帖子的人,您非常不清楚我在问什么。

最佳答案

我个人更喜欢构造函数注入(inject)依赖项,因为它可以防止对象状态的泄漏。如果一个对象依赖于 attr_writer,任何使用该对象的人都需要知道他必须设置哪些属性才能正确初始化该对象的状态。

通过构造函数参数,您知道当构造函数返回时对象被正确实例化。

对我来说,来自 Java 背景:

engine = Engines::V8.new("vroom")
car = Car.new(engine)

干净得多
car = Car.new
car.engine = Engines::V8.new("vroom")

因为如果我忘记提供参数,选项 1 会引发显式异常,而如果我忘记为汽车提供引擎,选项 2 就会出乎意料地失败。

我的 2c。

编辑添加:使用像 RubyMine 这样的现代 IDE,基于构造函数的注入(inject)也有助于快速建立类具有的依赖关系,而基于 attr_writer 的依赖关系则没有。

关于ruby - 构造函数注入(inject)与 attr_writer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21525584/

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