gpt4 book ai didi

language-agnostic - 服务定位器不仅仅是全局变量/状态吗?

转载 作者:行者123 更新时间:2023-12-04 08:36:47 24 4
gpt4 key购买 nike

为了解耦代码,您可以使用服务定位器,但这与全局变量/状态不同吗?

我知道这些经常运行接口(interface),所以你传入一个接口(interface)并返回一个具体的类,但我的问题仍然存在。

例如:

class Something {

void DoSomething() {
IMyType myType = ServiceLocator.GetSerivceTypeOf(IMyType);
}
}

在这里,该类需要在其他地方创建的 MyType,但不是通过链(通过构造函数等)向下传递 MyType,而是以这种方式获取它。

在我作为开发人员的职业生涯早期,我问过这个问题——在此之前我没有遇到过这种模式。 Anthony 在服务定位器上确定了我的观点(因此现在是选定的答案)——事实上,我认为它们与其他人一样是反模式。提供的链接是一个很好的起点——但在这段时间之后,为了在某种程度上回答我自己的问题,它们充当全局状态,应该避免。更喜欢标准的依赖注入(inject);)

最佳答案

是的,它们是全局变量。复杂的,但它们仍然具有相同的基本缺点。因此,依赖注入(inject)更可取。

有关构造函数注入(inject)替代方案的更详细讨论,另请参阅问题 What’s the difference between the Dependency Injection and Service Locator patterns?

等网页Singletons are Pathological LiarsDependency Injection pattern

关于language-agnostic - 服务定位器不仅仅是全局变量/状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978287/

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