为什么Prism鼓励使用Service Locator反模式?

时间:2012-09-14 05:12:55

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

当我从MVC转到使用Prism做一些WPF时,我买了一本Prism书,我再次感到震惊的是仍然看到服务定位器,这是一个已知的反模式。我已经读过像.NET中的Dependency Injection这样的书,Mark Seemann彻底了解了为什么Service Locator是一个反模式。

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

2 个答案:

答案 0 :(得分:3)

科学与艺术之间肯定存在平衡。发现的图案并非故意发明。有些语言适合更多的软件工程原则。当然还有很多讨论空间。我认为你对某些事情的使用提出质疑是正确的,但我不确定你是否会找到你的答案,因为你提到的另一个问题表明,“非常”的知名人士似乎彼此不同意。

我需要在需要的问题及其使用的背景下进一步澄清。总的来说,我认为应该分析这些“反模式”的使用。单身我读的很糟糕,但我们都知道它有目的。

答案 1 :(得分:0)

首先要澄清事实:Prism不鼓励使用ServiceLocator。这使得这个问题没有实际意义。也许你想把这个问题重新命名为'为什么棱镜书鼓励...',这可能会或可能不会成真,因为我还没有读过。

Prism建立在Unity IoC上,这是微软对IoC容器的实现。如果您使用它注册类型,它将正确构建它们。互联网上有很多文章说明了如何做到这一点。

现在,肥皂盒部分:

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

现在,我对Prism知之甚少,但是IMO,服务定位器可以很有意义,特别是如果它在框架内使用,因为它可以让开发人员有更多的设计和实现选择,而且应该是开发者的电话。

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