java 1.5:保持db表列名的常量的最佳实践?

技术: - Java 1.5或1.6 - Hibernate 3.4 为了避免在更改列名或表名时更改多个位置上的列名,我希望有一个常量文件。 我有以下疑问? 一种可能的解决方案是维护一个全局文件,该文件存储数据库中所有表的列名的常量。 喜欢
class DbConstants
{
        public static final String EMPLOYEE__PERFORMANCE_DESC="performance_desc";        
} 
在上面的情况中,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;
}    
这可以解决一些与全局文件一样的问题,比如表名更改只会导致类名更改。 这个问题的一个主要问题是我使用类仅用于定义不是良好编码实践的常量。 阅读一些有关值字符串Enum的内容而不是int不确定它是否可用于java 1.5或1.6以及是否建议在给定方案中使用它。 定义db常量的最佳做法是什么? 使用db常量真的很有用吗? 如果我像上面提到的那样为每个表使用一个类,我面临的一个问题是命名约定。表的名称和对应的类名称之间应该有什么关系,它们定义表的列的常量。 以上案例仅涵盖列名而非表名的情况。我可能喜欢在代码中使用常量而不是表名,因此应该采用什么方法来定义表名的常量。 经常有人认为,一旦产品或相关版本发布,表名和列名就不会发生太大变化。表名和列名的更改主要发生在开发阶段或功能增强(新版本)期间。避免对表名或列名使用常量是否是强有力的论据? 请建议我如何才能使我的问题更具代表性,或者我错过了哪些问题未被投票?     
已邀请:
听起来你问的是所有正确的问题 - 你想让代码更易于维护,但是你会意识到这可能会变得笨拙并最终导致代码变得更糟而不是更好。想想像“Color.RED,Color.BLACK”这样的东西。 我发现像这样的合理数量的常量使得代码更具可读性。我不认为db列名属于这样的东西,因为 它们不会经常被改变,或者至少它们不应该被改变 有足够的它们,你会以一大堆常量结束,此时人们停止使用它们,因为找到常量比在数据库中查找该死的名字更难。 我已经看到像这样的数据库文件有数千个常量,包括自定义查询,部分查询等等(甚至像
public static final String COMMA=",";
这样的宝石来处理逗号拼写将来会发生变化的可能性)。在这一点上,他们转向“使用一次”字符串,没有人敢改变它们。 另一个关于字符串常量的警告 - 韵母作为字符串被编译到你的类中。因此,如果您重新编译常量类,而不是使用该定义的类,则最终可能不会传播新定义。     
您是否考虑过使用实体映射框架(如Hibernate)? 它可以将所有数据库表信息(以及所有其他特定于DB的信息)存储在配置文件中。它还在“硬”数据库设计和您的应用程序之间提供了一个分离层(这样可以更容易地吸收对它们的更改)。     
在我目前的项目中,我们正在大量使用注释来处理许多与DB相关的元数据,因为我们不能使用像Hibernate这样的框架。对于实际的列常量,是的,我们使用经过验证的真实
public static final String
。是的,它相当脆弱。     
您可以创建一个定义常量的接口。 这是Android中的一个很好的例子。寻找
DataColumns
界面。     
当我有关于数据库的元数据时,我也会将其存储在数据库中。这是我看到其他系统运行的方式,如果不是最初那么最终。为确保维护此数据,您可以检查数据库的架构。     

要回复问题请先登录注册