C# 为什么单身被认为是一种不好的做法? 重复:
我正在读这个问题,惊讶地发现他认为单身是一种“坏习惯”,事实上,他认为这是常识 在任何使用iBatis从XML加载查询的项目中,我都经常使用单例。在这些情况下,它极大地提高了速度。我不知道你为什么不在这种情况下使用它们C# 为什么单身被认为是一种不好的做法? 重复:,c#,asp.net,C#,Asp.net,我正在读这个问题,惊讶地发现他认为单身是一种“坏习惯”,事实上,他认为这是常识 在任何使用iBatis从XML加载查询的项目中,我都经常使用单例。在这些情况下,它极大地提高了速度。我不知道你为什么不在这种情况下使用它们 所以。。。为什么它们不好?它们不一定不好,只是被误用和过度使用了。人们似乎莫名其妙地被这种模式所吸引,并寻找新的、创造性的方法将其应用到自己的应用程序中,不管它是否真的适用。单例完全不是坏习惯。事实上,它们在许多情况下都非常有用。但它们确实有两个主要的滥用和/或失败领域: 单元
所以。。。为什么它们不好?它们不一定不好,只是被误用和过度使用了。人们似乎莫名其妙地被这种模式所吸引,并寻找新的、创造性的方法将其应用到自己的应用程序中,不管它是否真的适用。单例完全不是坏习惯。事实上,它们在许多情况下都非常有用。但它们确实有两个主要的滥用和/或失败领域:
- 单元可测试性
- 多线程
两者都可以处理,但初学者往往忽视了这一点(通常是由于无知),结果造成的麻烦远远超过他们所知道的处理方法。它们是一种工具,与任何工具一样,有时你应该使用它们,有时你应该使用其他工具。在这种情况下,其他一些东西(工厂、静态类)在乍一看似乎适合单例的情况下会更好,这是事实
当
设计模式
问世时,似乎每个人都加入了单身潮——他们无处不在,甚至是他们不该去的地方。你现在看到的是(也许是当之无愧的)反弹。并不是说你根本不应该使用它们,但退一步看看所有可用的选项可能是个好主意。它们并不一定坏,而是它们往往被过度使用,并且在不需要的时候被大量使用。它们通常与单元测试一起被认为是坏的
如果您有一个单例,这意味着您的一个或多个类在某些方法中使用它。在对类进行单元测试时,不能欺骗这种依赖关系,因为该类直接使用它,而无需通过构造函数或属性进行请求
这通常就是人们说自己“坏”的原因
此外,在多线程应用程序中,很多人的实现都非常糟糕,以至于实例有可能被多次调用。这不是多线程应用程序不好的唯一原因。如果做错了,它们可能会成为一个瓶颈,迫使序列化访问可以并行使用的资源。