use*_*348 9 .net singleton design-patterns windows-services
我有一个运行的Windows服务.在这个服务中,我托管了一些服务(WCF).我需要一些"内存数据持有者"类.只要Windows服务正在运行,此类的目的是保存不持久的数据.必须可以通过WCF服务访问此类.他们在这个类中放了一些值或从这个类中检索一些值.
我想到的第一件事就是单身人士课程.我认为这种模式非常适合这种情况.但后来我读到一些帖子说单身人士班级实际上并不好.
那么这种情况还有其他选择吗?或者这是单身吗?Factory方法怎么样?但那我在哪里可以找到对象的参考?
Mar*_*ann 15
Singleton设计模式应该真正重新标记为反模式.这是邪恶的.不要使用它.
更好的选择是使用依赖注入(DI)并注入一个类,您可以使用它来保存所需的非持久性数据.
很多人没有意识到WCF支持依赖注入(DI)模式,例如构造函数注入,没有太多麻烦.
如果将注入的类作为一个长期存在的对象(通常称为Singleton 生存期样式,但不要与Singleton设计模式混淆),则可以在调用之间继续访问相同的实例.
但是,无论何时使用共享对象(无论是使用Singleton作为设计模式还是生命周期样式),都必须准备好处理多线程问题.
在其他许多内容中,本文描述了如何在没有默认构造函数的情况下将依赖项注入到WCF服务实现中.
我很想知道为什么人们不喜欢单身人士,我很乐意将它用于上述情况,除非有人能告诉我一些很好的理由.
它是一个理解和实现的简单模式,我认为保持简单是一个好事,在你或其他人必须维护代码的6个月内
编辑 为了解决为什么有些人不喜欢单例模式,我们在问题中解决了一系列有用的替代方案:Singleton的替代方案这涉及模式的单元测试缺陷.
编辑2 我终于确信singelton可能很糟糕.http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join-new-project.html指出,在维护方面声明API级别的依赖性使其更容易让程序员掌握依赖性.