Mad*_*hik 7 java database constants columnname code-maintainability
技术: - Java 1.5或1.6 - Hibernate 3.4
为了避免在更改列名或表名时更改多个位置上的列名,我希望有一个常量文件.
我有以下疑问?
一种可能的解决方案是维护一个全局文件,该文件存储数据库中所有表的列名的常量.喜欢
class DbConstants
{
public static final String EMPLOYEE__PERFORMANCE_DESC="performance_desc";
}
Run Code Online (Sandbox Code Playgroud)在上面的情况中,employees是表的名称,performance_desc是列名的名称.因此,如果两个表都有列名,则遵循一种tablename__columnname格式来命名一个常量,以避免两个不同表的两个常量之间发生冲突.
我看到这种方法的一个问题是,随着数据库的增长,该文件中没有任何常量将增长到数千个,这很难管理.其他问题是如果更改了表名,我必须更改所有表的前缀表名.
假设我将上面示例中的列名称从performance_desc更改为achievement_desc.在这种情况下,我很可能也想改变常数,即从EMPLOYEE__PERFORMANCE_DESC到EMPLOYEE__ACHIEVEMENT_DESC.因为在这种情况下我需要更改列名和常量名称我没有看到在我的代码中直接使用常量而不是列名的用处尽管有一个好处,在更改常量名称时我可以使用折射来反映常量名称名称在引用的地方更改.似乎要么没有太多使用常量,要么我错误地使用它.
在项目代码中,我似乎有人为每个表列列表定义一个类来定义常量,如下所示.
public class tbl_Employee
{
public static final PERFORMANCE_DESC=performance_desc;
}
Run Code Online (Sandbox Code Playgroud)这可以解决一些与全局文件一样的问题,比如表名更改只会导致类名更改.这个问题的一个主要问题是我使用类仅用于定义不是良好编码实践的常量.
阅读一些有关值字符串Enum的内容而不是int不确定它是否可用于java 1.5或1.6以及是否建议在给定方案中使用它.
定义db常量的最佳做法是什么?
使用db常量真的很有用吗?
如果我像上面提到的那样为每个表使用一个类,我面临的一个问题是命名约定.表的名称和对应的类名称之间应该有什么关系,它们定义表的列的常量.
以上案例仅涵盖列名而非表名的情况.我可能想在代码中使用常量而不是表名,因此应该为表名定义常量.
经常有人认为,一旦产品或相关版本发布,表名和列名就不会发生太大变化.表名和列名的更改主要发生在开发阶段或功能增强(新版本)期间.避免对表名或列名使用常量是否是强有力的论据?
请建议我如何才能使我的问题更具代表性,或者我错过了哪些问题未被投票?
听起来你问的是所有正确的问题 - 你想让代码更易于维护,但是你会意识到这可能会变得笨拙并最终导致代码变得更糟而不是更好.想想像"Color.RED,Color.BLACK"这样的东西.
我发现像这样的合理数量的常量使得代码更具可读性.我不认为db列名属于这样的东西,因为
它们不会经常被改变,或者至少它们不应该被改变
有足够的它们,你会以一大堆常量结束,此时人们停止使用它们,因为找到常量比在数据库中查找该死的名字更难.
我已经看到像这样的数据库文件有成千上万的常量,包括自定义查询,部分查询等等(即使是宝石也喜欢public static final String COMMA=",";
处理逗号拼写将来会发生变化的可能性).在这一点上,他们转向"使用一次"字符串,没有人敢改变它们.
另一个关于字符串常量的警告 - 韵母作为字符串被编译到你的类中.因此,如果您重新编译常量类,而不是使用该定义的类,则最终可能不会传播新定义.
归档时间: |
|
查看次数: |
5437 次 |
最近记录: |