在项目里面当静态变量多的时候是还还建在类好,还是保存在数据库的一个把数据都保存在数据库的一个表读取好?
比如:我们在项目常见的是否审核通过,常常:
[code="java"]public static final String OPENTYPE_NO="0";//未發布
public static final String OPENTYPE_YES="1";//已發布[/code]
[code="java"]public class Constants {
public static final String ADMIN_SESSION = "ADMIN_SESSION"; //管理员session 变量
public static final String FUNCID_SESSION = "FUNCID_SESSION"; //功能Session变量
public static final String FUNCID_SESSION_URL = "FUNCID_SESSION_URL"; //功能模块url变量
public static final String BENYI = "BENYI"; //本一
public static final String BENER = "BENER"; //本二
public static final String BENSAN = "BENSAN"; //本三
public static final String DAZHAUN ="DAZHAUN "; //大专
}[/code]
当我系统要求需要定义非常多的这种变量时是按上面的定义在类里面 ,还是把他们定义在 数据库,然后读取好呢?
table dictionary
id name value
1 benyi benyi
2 bener bener
3 bensan bensan
因为这个系统以后的的访问量会比较大
如果是写在数据库里以后要新增信息的时候,直接在数据库添加比较方便,比较规范,但是每次需要的时候都要频繁的读取这边表,会不会加重数据库的压力。
如果在类里定义,还需要改动程序源码。应该是直接加载在内存了吧 ,速度会被访问数据库的快吗?还是没有差别
请指点一下!
[quote]关键是有需要定义很多的变量,大部分是不用改动的,有差不多10 个是经常要改动的,现在在权衡到使用哪种,~ ~ 总不能两种都使用吧!! 谢谢您的回复[/quote]
经常改的放到属性文件里吧,尽量不要放到数据库。放到数据库的好处就是: 属性文件改了需要加载,数据库通常就不需要,缺点就是读取效率低,维护成本高(直接操作数据库有风险,如果不直接操作数据库,就必须提供接口给管理员,增加维护成本)
另外,不需要改动的还是放到类里 - 就象你定义的那样也是可以的。
两种侧率都使用是可以的,因为两者用途不一样,为了统一而统一意义不太大。
还是写在类里比较好,放在数据库里要建立连接,获取资源,消耗还是比较大的。
你提供的例子用枚举比较好,原因可以参考“effective java”第二版,有详细说明,比如说,你提供的例子可以写成:
[code="java"]public enum SessionManager {
ADMIN_SESSION {
public String toString() {
return "ADMIN_SESSION";
}
},
FUNCID_SESSION {
public String toString() {
return "FUNCID_SESSION";
}
},
FUNCID_SESSION_URL {
public String toString() {
return "FUNCID_SESSION_URL";
}
}
}[/code]
当然,如果一定要在类和表之间比较的话:
如果这些常量是不需要经常改的话(你提供的这些常量几乎完全不需要改),放在类里定义合适,如果需要经常改的话,放在属性文件或是表里都可以。
你这还不算数据字典没必要放在数据库,放在数据库里,还要sql去查询,性能明显要慢得多,最终还是要加载到内存中,
如果是写在数据库里以后要新增信息的时候,直接在数据库添加比较方便,比较规范,但是每次需要的时候都要频繁的读取这边表,会不会加重数据库的压力。
[color=red]是比较方便扩展新的常量,[/color]
如果在类里定义,还需要改动程序源码。应该是直接加载在内存了吧 ,速度会被访问数据库的快吗?还是没有差别
[color=red]速度自然比访问数据库快多[/color]
综合灵活性和性能的因素,我的建议是写这些常量写到配置文件中,properties文件或xml文件,看你的需要了,
这样,在系统启动时,读取配置文件加载这些信息,定期检查文件是否修改,如果修改的话就重新加载配置文件,
这样,不用修改代码了,灵活性达到了,性能的话,读文件比数据库是要快些