单例模式与Web应用程序,不是一个好主意!

时间:2010-04-25 17:05:44

标签: asp.net architecture

我发现了一些有趣的东西,当我调试其他东西时,我注意到了运气。我正在应用MVP模式,我制作了一个单独的控制器,可以在所有演示文稿中共享。

突然我发现有些事件在第一次回发时被调用一次,如果有两次回发则被调用两次,如果有100次回发则被调用100次。

因为Singleton基于一个静态变量来保存实例,而静态变量存在于回发之间,我假设它将连接一次并为每次回发重新连接而连接事件。

我认为在Web应用程序中应用单例之前我们应该三思而后行,否则我会错过一些东西?

谢谢

3 个答案:

答案 0 :(得分:10)

我会考虑在任何地方使用Singleton。

许多人认为Singleton反模式

  

有些人认为它是一种反模式,判断它过度使用,在实际上不需要类的唯一实例的情况下引入了不必要的限制,并将全局状态引入应用程序。

维基百科上有很多参考文献可以讨论这个问题。

需要单身人士是非常罕见的,我个人认为他们与全局变量一样。

答案 1 :(得分:6)

由于共享状态,在多线程应用程序(不仅是单例模式)中使用静态对象时,您应该三思而后行。应该应用适当的锁定机制,以便同步对共享状态的访问。如果不这样做,可能会出现一些非常难以发现的错误。

答案 2 :(得分:4)

我已经在我的网络应用程序中使用Singletons很长一段时间了,他们总是为我做得很好,所以说他们是一个坏主意真是一个相当困难的声明。当使用Singletons时,主要思想是保留所有特定于会话的信息,并将它们更多地用于全局或应用程序数据。要避免它们,因为它们“坏”实际上并不太聪明,因为它们在正确应用时非常有用。