2008-12-17 27 views
26

在我到目前为止的所有项目中,我使用单身模式来访问整个应用程序中的应用程序配置。最近我看到很多文章都提到不使用单例模式,因为这种模式并没有提升可测试性,它也隐藏了组件依赖。 我的问题是存储应用程序配置的最佳方式是什么?它可以在整个应用程序中轻松访问,而无需将配置对象全部传递给应用程序。用于应用程序配置的单身人士

由于提前

马杜

回答

21

我认为应用程序配置为Singleton模式的一个很好的使用。我倾向于自己使用它,以防止每次我想要访问配置时重新读取配置,并且因为我喜欢强配置配置(即不必每次都转换非字符串值)。为了支持可测试性,我通常在一些后门方法中构建一些后门方法 - 也就是说,可以注入一个XML配置,这样我就可以在我的测试中设置它,并且可以销毁Singleton,以便在需要时重新创建它。通常这些都是我通过反射访问的私有方法,以便它们从公共接口中隐藏。

编辑我们生活和学习。虽然我认为应用程序配置是使用Singleton的少数几个地方之一,但我不再这样做。通常,现在,我将使用静态配置属性的Lazy<T>支持字段创建接口和标准类实现。这使我可以对每个属性进行“初始化一次”行为,并设计更好的可测试性。

+3

+1做了一个例子,人们喜欢创造,如“从一个循环只有一个出口”或“不允许有单身”他们的小规则。我更喜欢务实而不是教条,因为教条导致人们无法为自己思考。如果只能有一个X对象,则应该只有一个XConfig对象。 – paxdiablo 2008-12-17 04:38:43

+2

拥有一个配置对象的单个实例是很好的,但它并不能使单个实例更好。在实际的类中使用像特定于测试的方法这样的黑客并不适合干净的代码或测试。 – ColinD 2008-12-18 22:37:52

1

对于这种特定情况,我会创建一个配置对象并将其传递给需要它的人。

由于它是配置,它只能在应用程序的某些部分使用,不一定应该是无所不在的。

但是,如果你没有使用它们的问题,并且不想测试它那么难,那么你应该继续像现在这样做。

阅读有关为什么他们认为有害的讨论。我认为大多数问题都是在单身人士拥有大量资源时才出现的。

对于应用程序配置,我认为这将是安全的,保持它的样子。

5

使用依赖注入将单个配置对象注入到任何需要它的类中。通过这种方式,您可以使用模拟配置进行测试或任何您想要的内容......您并未明确地出去,并获得需要使用配置文件初始化的内容。通过依赖注入,你不会传递任何对象。