Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么单身被认为是一种不好的做法? 重复:_C#_Asp.net - Fatal编程技术网

C# 为什么单身被认为是一种不好的做法? 重复:

C# 为什么单身被认为是一种不好的做法? 重复:,c#,asp.net,C#,Asp.net,我正在读这个问题,惊讶地发现他认为单身是一种“坏习惯”,事实上,他认为这是常识 在任何使用iBatis从XML加载查询的项目中,我都经常使用单例。在这些情况下,它极大地提高了速度。我不知道你为什么不在这种情况下使用它们 所以。。。为什么它们不好?它们不一定不好,只是被误用和过度使用了。人们似乎莫名其妙地被这种模式所吸引,并寻找新的、创造性的方法将其应用到自己的应用程序中,不管它是否真的适用。单例完全不是坏习惯。事实上,它们在许多情况下都非常有用。但它们确实有两个主要的滥用和/或失败领域: 单元

我正在读这个问题,惊讶地发现他认为单身是一种“坏习惯”,事实上,他认为这是常识

在任何使用iBatis从XML加载查询的项目中,我都经常使用单例。在这些情况下,它极大地提高了速度。我不知道你为什么不在这种情况下使用它们


所以。。。为什么它们不好?

它们不一定不好,只是被误用和过度使用了。人们似乎莫名其妙地被这种模式所吸引,并寻找新的、创造性的方法将其应用到自己的应用程序中,不管它是否真的适用。

单例完全不是坏习惯。事实上,它们在许多情况下都非常有用。但它们确实有两个主要的滥用和/或失败领域:

  • 单元可测试性
  • 多线程

两者都可以处理,但初学者往往忽视了这一点(通常是由于无知),结果造成的麻烦远远超过他们所知道的处理方法。

它们是一种工具,与任何工具一样,有时你应该使用它们,有时你应该使用其他工具。在这种情况下,其他一些东西(工厂、静态类)在乍一看似乎适合单例的情况下会更好,这是事实


设计模式
问世时,似乎每个人都加入了单身潮——他们无处不在,甚至是他们不该去的地方。你现在看到的是(也许是当之无愧的)反弹。并不是说你根本不应该使用它们,但退一步看看所有可用的选项可能是个好主意。

它们并不一定坏,而是它们往往被过度使用,并且在不需要的时候被大量使用。

它们通常与单元测试一起被认为是坏的

如果您有一个单例,这意味着您的一个或多个类在某些方法中使用它。在对类进行单元测试时,不能欺骗这种依赖关系,因为该类直接使用它,而无需通过构造函数或属性进行请求

这通常就是人们说自己“坏”的原因


此外,在多线程应用程序中,很多人的实现都非常糟糕,以至于实例有可能被多次调用。

这不是多线程应用程序不好的唯一原因。如果做错了,它们可能会成为一个瓶颈,迫使序列化访问可以并行使用的资源。