如果Singletons如此糟糕,那么如何管理应用程序配置呢?

时间:2016-02-01 22:30:10

标签: design-patterns singleton

我知道Singleton设计模式由于各种原因而不受欢迎。他们不容易模拟单元测试,他们不是线程安全等等。但是现在又一次,我面临着一个应用程序由配置文件驱动的情况(应用元数据)。关于此应用程序的所有内容都包含在其配置文件中(让我们说json,应用程序在其配置更改时下载)。此应用程序的唯一目的是为用户提供包装配置和允许流程的UI。没有这个配置文件,该应用程序是无用的。我认为这是很多应用程序的常见情况。

因此,如果应用程序100%来自配置文件,那么您将如何设计代码以避免使用单例?你会不会只在需要的时候从这个json文件中读取,而且只有特定的部分?意思是,每当UI调用它时,你都必须将json反序列化为对象吗?我的意思是,这个配置文件是不是和单身人士一样?我有兴趣听听人们如何接近这一点。

1 个答案:

答案 0 :(得分:2)

单例的一个(很多)问题是它隐藏了类之间的依赖关系。因为单例是普遍可访问的,所以这些隐藏的依赖关系在整个程序中往往像瘟疫一样传播,增加耦合并阻碍测试的进展。

更好的设计是使用(非单例)类进行配置(可能会也可能不会在每次调用时重新加载数据,由您决定),然后传递给需要它的客户端。此配置类将充当配置文件的外观,为检索部分配置提供简便方法。由于依赖项无法隐藏,因此很快就会清楚您的设计是否良好。此外,将整个配置发送到客户端可能不是一个好主意,而只是实际需要的数据。如果配置经常更改,使用observer pattern可能会很有趣,这样客户端就可以收到有关配置更改的通知。

您可能也对dependency injection感兴趣,因为它分隔了使用和构建类之间的责任(通常使用DI框架来构建构造)。