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