gpt4 book ai didi

ioc-container - 为什么动态语言不需要 IOC 容器

转载 作者:行者123 更新时间:2023-12-03 06:56:54 27 4
gpt4 key购买 nike

《畜牧代码》播客第 68 期有人,http://herdingcode.com/herding-code-68-new-year-shenanigans/ ,表示 IOC 容器不适合使用 Python 或 Javascript,或者类似的词语。我假设这是传统观点,并且它适用于所有动态语言。为什么?动态语言的哪些特点使得 IOC 容器变得不必要?

最佳答案

IoC 提供了一种机制来打破当一个对象在另一个类上调用“new”时所获得的耦合。这种耦合将调用对象与其实现的任何接口(interface)的实例化实现联系起来。

在静态语言中,当您按名称引用类(对其调用new)时,不会产生歧义。这是与特定类的紧密耦合

在动态语言中,调用new X是“在执行时实例化定义为X的任何类”的占位符。这是松散耦合,因为它仅与名称X耦合。

这种微妙的差异意味着,在动态语言中,您通常可以更改 X 的含义,因此实例化哪个类的决定仍然可以在调用类之外进行修改。

但是,我个人发现 IoC 有两个优点,这是我依靠动态语言允许注入(inject)所无法获得的。

通过构造函数传递依赖项的副作用之一是,您最终会得到非常解耦、可重用且易于测试的“构建 block ”类。他们不知道要在什么上下文中使用它们,因此您可以在任何地方重复使用它们。

另一个结果是有明确的代码来进行连接。如果做得正确,这可以清晰地代表应用程序的结构,并将其分解为子系统和生命周期。这使得人们明确地决定他们想要将他们的类与哪个生命周期或子系统关联起来(在编写连接代码时),并在编写类时集中精力于对象的行为。

就像 Jörg W Mittag 所说......“这些工具是不必要的,设计原则则不是。”我相信它们是不必要的,但如果做得正确,仍然有值(value)。

关于ioc-container - 为什么动态语言不需要 IOC 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273683/

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