我们有一个保存应用程序配置信息的类。它曾经是一个单例。在一些架构审查之后,我们被告知要删除单例。我们确实看到了单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。
如果没有单例,我们必须在代码中到处传递实例。它变得如此混乱,所以我们写了一个单例包装器。现在我们正在将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可以用于配置对象。
发布于 2009-08-19 15:30:16
Google Testing blog有一系列关于避免单例的条目(为了创建可测试的代码)。也许这对你有帮助:
上一篇文章详细解释了如何将新对象的创建转移到工厂中,这样您就可以避免使用单例。当然值得一读。
简而言之,我们将所有的新操作符都转移到一个工厂。我们将生命周期相似的所有对象组合到一个工厂中。
发布于 2009-08-19 15:27:37
最好的方法是使用工厂模式。当您构造类的新实例(在工厂中)时,您可以将“全局”数据插入到新构造的对象中,作为对单个实例(存储在工厂类中)的引用,或者通过将相关数据复制到新对象中。
然后,您的所有对象都将包含过去存在于单例中的数据。我不认为总体上有太大的区别,但它可以使您的代码更容易阅读。
发布于 2009-08-19 15:28:56
我可能在这里陈述了一个显而易见的事实,但是你有什么理由不能使用Spring或Guice这样的依赖注入框架吗?(我相信Spring现在也可以用于.NET )。
这样,框架可以保存配置对象的单个副本,并且您的bean(服务、DAO等)不必担心查找它。
这是我通常采用的方法!
https://stackoverflow.com/questions/1300655
复制相似问题