2010-04-25 47 views
1

我发现了一些有趣的东西,当我调试其他东西的时候,我发现它很幸运。我正在申请MVP模式,并且我在所有演示文稿中共享了一个单身控制器。带Web应用程序的单例模式,不是一个好主意!

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

因为Singleton基于一个静态变量来保存实例,而静态变量存在于回传中,并且我连线事件,假设它将被连线一次,并为每个回发重新布线。

我想我们应该在Web应用程序中应用单例之前三思,否则我会错过什么?

感谢

+1

MCP模式?你的意思是MVP?但是那没有控制器。或者也许MVC?但那并没有“演示文稿”。我从未听说过任何单身人士都参与其中。我认为你有点困惑。 – Aaronaught 2010-04-25 17:09:16

+3

你的问题不是你使用了“单例”,而是你没有彻底评估你的代码的含义。理解您编写的代码,而不是将设计模式用作“邮票”并将它们翻译成语法。他们是准则,而不是邮票。 – 2010-04-25 17:09:39

+0

我认为最初的Struts框架要求所有的控制器都可以跨请求重用。我也记得它是开发人员相当多的悲痛的原因。小心跨请求共享同一个对象(就像使用单例一样)。 – R0MANARMY 2010-04-26 03:02:12

回答

5

你应该考虑你正在使用中,因为共享状态的多线程应用程序(不只是单件模式)的静态对象两次任意时间。应该使用适当的锁定机制来同步对共享状态的访问。如果没有这样做,可能会出现一些很难找到的错误。

9

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

许多人认为Singleton反模式

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

维基百科上有很多关于此的参考文献。

这是非常罕见的需要一个单身人士,我个人认为他们在全球变数相同的光。

3

我一直在我的web应用中使用单身人士已经有相当长的一段时间了,他们一直对我很好,所以说他们是个坏主意是一个非常难以相信的主张。当使用Singleton时,主要思想是保留所有特定于会话的信息,并将它们用于全局数据或应用程序数据。为了避免它们,因为它们“不好”,实际上不太聪明,因为它们在正确应用时可能非常有用。

相关问题