我有一个windows服务running.Inside这个服务,我已经托管了一些服务(WCF)。我需要有一个“内存中的数据持有者”类。此类的用途是在windows服务运行期间保存非持久性数据。必须可以通过WCF服务访问此类。他们将一些值放在这个类中,或者从这个类中检索一些值。
我首先想到的是一个单例类,我认为这个模式非常适合这种情况。但后来我读到了一些帖子,说单件类实际上并没有那么好。
那么,对于这种情况,还有其他选择吗?或者这个单例是可以的吗?工厂方法怎么样?但是,我在哪里可以找到这些对象的引用呢?
发布于 2009-12-17 20:36:46
单例设计模式真的应该被重新标记为反模式。这是邪恶的。不要用它。
一种更好的替代方法是使用依赖项注入接口( Dependency Injection,DI)并注入一个类,您可以使用该类来保存所需的非持久性数据。
很多人没有意识到WCF支持依赖注入(DI)模式,比如构造器注入,没有太多麻烦。
如果您将注入类的作用域作为长期对象(通常称为Singleton生存期样式,但不要与Singleton设计模式混淆),则可以在两次调用之间继续访问相同的实例。
然而,无论您何时使用共享对象(无论您使用单例作为设计模式还是生命周期样式),您都必须准备好处理的多线程问题。
其中,this post描述了如何在没有默认构造函数的情况下将依赖项注入到WCF服务实现中。
发布于 2009-12-17 20:43:08
我很想知道为什么人们不喜欢单例,我很乐意在上面的场景中使用它,除非有人能告诉我为什么不喜欢它。
这是一个易于理解和实现的简单模式,我认为在6个月的时间内保持它的简单是一件好事,因为你或其他人必须维护你的代码
编辑对于为什么有些人不喜欢单例模式做了更多的挖掘,在问题:What's Alternative to Singleton中提出了一系列有用的替代方案,这解决了该模式的单元测试缺陷。
编辑2我终于相信单调可能是不好的。http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join-new-project.html提出了一个很好的观点,在维护方面,在API级声明依赖项使程序员更容易掌握依赖项。
发布于 2009-12-17 20:25:06
为什么你需要一个单例来做这个?
您真的需要将此类的实例限制为单个实例吗?如果没有,就不要使用单例--你不需要它,它只会给你的类增加复杂性。
https://stackoverflow.com/questions/1921382
复制相似问题