2009-12-17 62 views
8

我有一个Windows服务正在运行。在这个服务中我托管了一些服务(WCF)。 我需要某种“内存数据持有者”类。只要windows服务正在运行,这个类的目的就是保存不持久的数据。 该类必须可通过WCF服务访问。他们在这个类中放置了一些值,或者从这个类中检索一些值。单身或不是

首先我想到的是一个单身人士课程。我认为这种模式适合这种情况。但后来我读了一些帖子,认为单身人士课堂并不是那么好。

那么这种情况还有其他的选择吗?或者是单身人士呢?工厂方法怎么样?但是,我在哪里可以找到对象的引用?

回答

14

Singleton设计模式应该被重新标记为反模式。 这是邪恶的。不要使用它。

更好的选择是使用依赖注入(DI)并注入一个类,您可以使用该类来存储所需的非持久性数据。

很多人没有意识到WCF支持依赖注入(DI)模式,如构造函数注入没有太多的麻烦。

如果您将注入的类作为长寿命对象(通常称为Singleton 生命周期样式,但不要与Singleton设计模式混淆),您可以继续在调用之间访问相同的实例。

但是,只要您使用共享对象(无论您使用辛格尔顿作为设计图案或一生的风格),你必须准备好处理多线程问题

在其他很多事情中,this post描述了如何在没有默认构造函数时将依赖注入到WCF服务实现中。

+0

出于兴趣为什么你认为这个单身人士是邪恶的? – AJM 2009-12-17 12:39:52

+3

Stackoverflow知道:http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons – tanascius 2009-12-17 12:43:30

1

为什么你需要一个单独的呢?

您是否确实需要将此类的实例限制为单个实例?如果不是,不要使用单身 - 你不需要它,它只会增加你的课程的复杂性。

+0

但我将在哪里存储创建对象的instace引用?我的意思是,当创建对象的方法超出范围时,对象将会丢失。 – user137348 2009-12-17 12:35:35

6

我很想知道为什么人们不喜欢这个单身人士,我会很乐意将它用于上述场景,除非有人能够告诉我一些很好的理由。

它是一种简单的模式来理解和执行,我想保持简单是6个月的时候,你还是soemone人有保持你的代码

编辑 一件好事已经做了一些更挖掘为什么有些人不喜欢单身模式一个有用的一堆替代品在这个问题中得到解决:What's Alternative to Singleton这涉及到模式的单元测试缺点。

编辑2 我终于确信,辛格尔顿可能是坏的。http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join-new-project.html说明了在维护方面声明API级别的依赖性使得程序员更容易掌握依赖关系。

+1

这里有一些很好的问题 - 你也可以谷歌“单身被认为有害”,也 - 也应该展示有趣的讨论。 – tanascius 2009-12-17 12:46:58

+0

第二篇文章真的是一个很好的和可以理解的例子...我必须自己保留...无论如何感谢和+1 – tanascius 2009-12-17 15:40:34

+0

我不相信第二个例子。这些问题可以通过验证CreditCard构造函数中的初始化和跳闸声明来解决。 – lorean 2011-12-21 20:18:47