我继承了一个项目,该项目将各种参数存储在配置文件、注册表和数据库中。需要这些参数之一的人只需直接从存储中读取(并且在某些情况下写入)它。这当然是愚蠢的,所以我的第一个想法是重构现有代码,以便客户端不知道参数存储在哪里。我创建了一个经典的 AppSettings 类,它为每个参数都有一个属性。由于商店必须具有全局范围,因此我制作了一个线程安全的单例。该类不将参数值存储在字段中,而是通过在实际存储(无论是配置文件、注册表还是数据库)中读取和写入参数值来充当访问点。这些天来,很难避免所有关于单例和全局状态的危险的讨论。
- 我的解决方案除了可测试性之外,还有哪些类型的问题?
- 什么是轻量级的替代品?为每个使用参数的对象创建工厂不是一种选择(工作量太大)。
- 在我有机会进行一些更重的重构之前,使用单例是否可以作为一种可接受的折衷方案?
- 如果我的单例类中的属性只有吸气剂,那会好吗?
我可以预料到某些参数的存储将来会发生变化(例如,从注册表到数据库),所以这就是我将存储隐藏在单例类后面的动机。