1

我在属性文件中有很多值,这些值在我的应用程序中读取以设置值(数据库连接、电子邮件服务器等)。

db.properties:

db.user=admin
db.pwd=secret1234

现在在我的 DatabaseService 类中,我有这样的东西:

private static final String DB_USER = "db.user";
private static final String DB_PWD = "db.pwd";
private Properties dbProps = new Properties();
// read db.properties values into dbProps
String user = dbProps.getProperty(DB_USER);

然后在我的 DatabaseServiceTest 类中,我重复了代码:

private static final String DB_USER = "db.user";
private static final String DB_PWD = "db.pwd";
private Properties dbProps = new Properties();
// read db.properties values into dbProps
String user = dbProps.getProperty(DB_USER);

所以我重复了代码。因此,我将静态字符串值放入托管所有字符串的 StaticVars 类中,因此 DatabaseService 和 DatabaseServiceTest 现在看起来像这样(我也可以将 Properties 放入实用程序类中,但是这个示例有很多,所以我到目前为止还没有):

private Properties dbProps = new Properties();
// read db.properties values into dbProps
String user = dbProps.getProperty(StaticVars.DB_USER);

有没有更好的方法来跨多个类文件共享静态字符串?我当前的 StaticVars 类有大约 150 个静态字符串值,并且还在增长。好像我走错了路。

谢谢,肖恩

4

1 回答 1

0

我认为您的一般方法 - 使用public static final String公共类的成员 - 是跨应用程序共享字符串的好方法。

但是,不要低估命名的重要性。当你在 6 个月后回到这段代码时,你会记得你的属性名称存储在一个名为 的类中StaticVars吗?如果您真的只存储属性名称,那么也许应该调用该类PropertyNames。现在您已经限制了类的范围,并且不太可能在字符串中混入错误消息或正则表达式或其他内容。(这些应该使用有意义的名称进入不同的类,以帮助您记住它们存储的值类型。)

更进一步,由于这些是属性名称,它们很可能在getProperty调用中使用。那么为什么不重命名类PropertyUtilsConfigUtils,并具有使用属性名称的匹配静态方法。然后,如果某些属性是可选的,您可以添加默认属性值。

   public static final String DB_HOST = "db.host";
   public static final String DB_USER = "db.user";
   public static final String DB_PWD = "db.pwd";

   public static String getDbHost(Properties props)
   {
      return props.getProperty(DB_HOST, "localhost");
   }
   public static String getDbUser(Properties props)
   {
      return props.getProperty(DB_USER, "admin");
   }
   public static String getDbPwd(Properties props)
   {
      return props.getProperty(DB_PWD);
   }
于 2013-09-11T19:40:07.610 回答