在我目前正在开发的项目中,我有很多配置设置。诸如此类的事情
- 闹钟时间
- 从服务器检索的项目数量
- LocationManager 整数,例如最小位置
这些都是静态最终的,并且都在与值对应的类中。
我的问题是,将所有这些值移动到单个静态类有什么问题吗?
我的想法是,在测试和调整应用程序时,它会更容易管理。
以@Snicolas 的回答为基础...
您确实应该在代码(文件或数据库)之外保留您的 CONFIGURATION 设置。但是您不应该在每次需要值时“读取”该配置,否则效率会很低。
使用类来管理配置(即 AppSettings)是一个好主意。使其成为静态是提供类似单例的访问的一种方式。在 C# 和 ASP.NET 中,Web 应用程序将保证一个且只有一个静态类实例,因此来自不同用户的多个不相关请求将共享完全相同的静态值。
但在你的情况下(我看到标签'android')使用Java你最好的选择可能是单例方法。我不知道垃圾收集在 Java 中是如何工作的,但我想说你应该使用单例来确保你的设置只有一个实例。单例确保一个实例存在(如果不存在,则创建一个),然后将其提供给调用者。
这也可以更容易地支持在应用程序运行时更改配置值的能力——您可以“观察”定期设置更改。
我不是 Java 人,但如果还没有一个库来处理这个问题,我会感到惊讶(当然不是真的)。
我很确定您不是在谈论常数,因为您提到了闹钟时间。
在专用类中仅使用静态字段的问题是,如果设备处于内存压力之下,您的类可能会被垃圾回收。在这种情况下,当您再次使用它们时,它们只会丢失并重置。
因此,您应该真正考虑将它们保存在文件或数据库中,具体取决于您要存储的数据量。SharedPreferences 对于少量数据可能很有用,否则,请考虑使用数据库。这是一个更具可扩展性的解决方案,对于更大的数据集,访问时间会更好。
在 Rails 世界中,实现一个懒加载和缓存配置信息的配置模型类是一个很好的实践,这些配置信息以序列化的形式永久存储在一个简单的两列(键和序列数据值)表或(较少见)平面中文件。配置编辑器只是这个模型的一个视图。
这在 Android 中也应该是一个很好的解决方案。
另一个想法是将这些常量存储在一个properties
文件中。并在需要时加载常量。http://viralpatel.net/blogs/loading-java-properties-files/
如果您觉得方便,这是一个很好的做法。