【问题标题】:Why does Prism encourage use of the Service Locator anti-pattern? [closed]为什么 Prism 鼓励使用服务定位器反模式? [关闭]
【发布时间】:2012-09-07 06:18:47
【问题描述】:

当我从 MVC 转向使用 Prism 做一些 WPF 时,我买了一本 Prism 书,我再次震惊地看到服务定位器,它是一种已知的反模式。我已经阅读了诸如 .NET 中的依赖注入之类的书,Mark Seemann 彻底了解了为什么服务定位器是一种反模式。

我只是想帮助成为最佳模式和实践的传播者,并且想知道谁没有得到这些模式中的一些实际上是不好的备忘录。

【问题讨论】:

标签: wpf design-patterns prism anti-patterns prism-4


【解决方案1】:

科学与艺术之间当然存在平衡。发现模式不是有意发明的。一些语言使自己更受软件工程原则的约束。这当然有很大的讨论空间。我认为您质疑某些东西的使用是正确的,但我不确定您是否会找到答案,因为您提到的另一个问题表明“非常”知名人士似乎彼此不同意。

我需要对需要的事项和使用它的上下文进行更多说明。总的来说,我认为应该分析这些“反模式”的使用。我读的 Singleton 很糟糕,但我们都知道它是有目的的。

【讨论】:

    【解决方案2】:

    首先澄清事实:Prism 不鼓励使用 ServiceLocator。这使得这个问题没有实际意义。也许您想将问题重命名为“为什么 Prism 书鼓励......”这可能是真的,也可能不是,因为我还没有读过它。

    Prism 建立在 Unity IoC 之上,后者是 Microsoft 的 IoC 容器实现。如果你用它注册你的类型,它会正确地构建它们。互联网上有很多文章展示了如何做到这一点。

    现在,肥皂盒部分:

    我认为没有最佳实践之类的东西,因为任何“最佳实践”在某些情况下都没有意义。例如,当我看到一个单身人士时,它总是会响起警报,但在某些情况下,拥有它是可以的。即使是“goto”有时也是合理的(天哪!他刚刚说了什么?!?!)

    现在,我对 Prism 了解不多,但是 IMO,服务定位器非常有意义,特别是如果它在框架内使用,因为它可以让开发人员有更多的设计和实现选择,这应该是开发商的电话。

    要真正了解这是否是一个错误的决定(而且很可能是),看看使用 Prism 的开发人员由于涉嫌使用 ServiceLocator 而不能做的事情会很有趣,否则如果 Prism 使用 DI .

    【讨论】:

    • 您的问题不是关于 Prism 的 SL 的我们,而是对 SL 的一般咆哮。我对你对大师马克·西曼的崇拜或宣传他的书没有意见,而且我对大师们的兴趣也不是很大(尽管他的文章发表时我已经阅读过)。但是,在这种情况下,您没有提到由于 SL 而无法实现的事情。它如何阻止您在代码中使用 DI?您是否打算对 Prism 本身进行单元测试?以类似的方式,有人可能会告诉您使用静态类型语言也是一种不好的做法,因为您通常不需要使用动态语言进行 DI。哦,真的吗?
    • 服务定位器不限制功能,但它限制可发现性 - DI imo 共享的功能。无论哪种情况,您都需要知道自己想要什么服务。
    猜你喜欢
    • 2011-11-14
    • 2011-10-23
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2018-11-26
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多