2012-11-14 59 views
0

在我正在开发的项目中,我有很多配置设置。项目的东西,如正在使用静态配置类良好实践吗?

  • 报警时间
  • 金额从服务器获取
  • 的LocationManager整数,如铅丹位置

这些都是静态的决赛,都在一类对应到价值。

我的问题是,将所有这些值移动到单个静态类是否存在任何问题?

我的想法是,当涉及到测试和tweeking应用程序,它会更容易管理。

+0

如果可能的话,我会将配置外部化,以便您可以在运行时更改它,而无需重新构建。 – sean

+1

你的问题很模糊。你是在谈论类/接口中的文件或静态常量吗? – Snicolas

+0

我觉得很清楚,问题说他们在一个班级,并问我应该将他们移到另一个班级 – jiduvah

回答

1

@ Snicolas的答案建立在...

你确实应该坚持的代码(文件或数据库)之外的配置设置。但是,每次需要值时都不应“读取”该配置,否则效率会很低。

使用一个类来管理配置(即AppSettings)是一个好主意。使其成为静态是提供类似单身访问的一种方式。在C#和ASP.NET中,一个Web应用程序将保证静态类的一个且只有一个实例,因此来自不同用户的多个不相关请求将共享完全相同的静态值。

但在你的情况下(我看到标签'安卓')使用Java你最好的选择可能是Singleton方法。我不知道Java中的垃圾收集是如何工作的,但我会说你应该使用单例来确保设置的一个和一个实例。单例确保实例存在(或者创建一个实例),然后将其提供给调用者。

这也可以让它更容易支持在应用程序运行时更改配置值的能力 - 您可以“观察”以定期设置更改。

我不是一个Java人,但如果还没有一个库来处理这个问题,我会感到惊讶(好吧,不是真的)。

+0

...并且在仇恨者开始敲C#ASP.NET静态类概念之前,我知道潜在的竞争条件和其他非线程安全问题用这种方法。 – kingdango

+2

实际上,静态类中加载了所有配置的静态类将执行该作业,而不会出现任何线程问题或问题。它还将确保只在应用程序部署期间加载配置。因为一切都是静态的,所以不需要把它变成单身。如果您想在应用程序运行时更改配置,那么使用某些数据库的缓存刷新设置时,配置会更好。 – Thihara

1

我很确定你不是在谈论常量,因为你提到了闹钟时间。

仅在专用类中使用静态字段的问题是,如果设备处于内存压力下,您的类可能会被垃圾收集。在那种情况下,当你再次使用它们时,它们会丢失并重置。

因此,您应该考虑将它们保存在文件或数据库中,具体取决于您要存储的数据量。 SharedPreferences可以用于少量数据,否则,请考虑使用数据库。这是一个更具可扩展性的解决方案,访问时间对于更大的数据集更好。

+0

你可以设置重复报警。我将1小时(以毫秒为单位)传递给警报管理器,例如 – jiduvah

0

在Rails的世界中,最好实现一个配置模型类,它懒惰地加载和缓存配置信息,它以序列化形式永久存储在简单的两列(键和串行数据值)表中或经常)一个平面文件。配置编辑器就是这个模型的一个View。

这应该是Android的一个很好的解决方案。

-1

如果您觉得方便,这是一个很好的做法。