gpt4 book ai didi

oop - 依赖注入(inject)必须以牺牲封装为代价吗?

转载 作者:行者123 更新时间:2023-12-03 04:32:58 25 4
gpt4 key购买 nike

如果我理解正确,依赖注入(inject)的典型机制是通过类的构造函数或通过类的公共(public)属性(成员)注入(inject)。

这暴露了被注入(inject)的依赖项并违反了 OOP 封装原则。

我对这种权衡的判断是否正确?您如何处理这个问题?

另请参阅下面我对自己问题的回答。

最佳答案

还有另一种看待这个问题的方式,您可能会觉得有趣。

当我们使用 IoC/依赖注入(inject)时,我们没有使用 OOP 概念。诚然,我们使用 OO 语言作为“宿主”,但 IoC 背后的思想来自面向组件的软件工程,而不是 OO。

组件软件就是管理依赖关系 - 一个常见的例子是 .NET 的 Assembly 机制。每个程序集都会发布它引用的程序集列表,这使得将正在运行的应用程序所需的各个部分组合在一起(并验证)变得更加容易。

通过 IoC 在我们的 OO 程序中应用类似的技术,我们的目标是使程序更易于配置和维护。发布依赖项(作为构造函数参数或其他形式)是其中的关键部分。封装并不真正适用,因为在面向组件/服务的世界中,没有“实现类型”可供泄漏细节。

不幸的是,我们的语言目前并未将细粒度的面向对象的概念与粗粒度的面向组件的概念分开,因此您只需牢记这一区别即可:)

关于oop - 依赖注入(inject)必须以牺牲封装为代价吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005473/

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