ai didi

java - 使用枚举来**存储**行和列的数据库名称是不是有点过分了?

转载 作者:搜寻专家 更新时间:2023-11-01 03:11:22 24 4
gpt4 key购买 nike

使用枚举而不是文字来引用表和列的名称是一种好习惯吗?还是矫枉过正?

例如
而不是这样做:

executeQuery("SELECT name, age FROM people WHERE id = '23';");

做这样的事情:

executeQuery("SELECT "+COLUMN.NAME.getName()+", "+COLUMN.AGE.getName()+
"FROM "+ TABLE.PEOPLE.getName()+" WHERE "+COLUMN.ID.getName()+" = '23';");

有这个枚举

public Enum COLUMN{
NAME("name"),
AGE("age"),
ID("id");
//...
}

如果数据库的结构尚未真正定义好,但您已 promise 开始使用该尚未定义的数据库开发代码,那该怎么办?

最佳答案

我个人认为这是矫枉过正。这就是所谓的“软编码”,当你走得太远时,它和硬编码一样糟糕。可能更糟,因为它的坏处更微妙——而且对于那些一遍又一遍地听说硬编码“邪恶”的人来说,它很有诱惑力。

考虑当年龄列的名称更改时会发生什么。您要么有一个枚举,其值不再对应于列的名称(阅读:代码对您说谎),要么您必须检查并更改对 COLUMN.AGE 的每个引用以使用 COLUMN.NEW_NAME_FOR_AGE 而不是(阅读:您还没有避免以后不得不编辑代码,这可能是您考虑这个的最大原因)。如果结构 发生变化,那甚至还没有考虑到会发生什么。如果该列移动到另一个表或其他东西,您的枚举将无法按原样处理。

如果您真的对数据库没有任何控制权,您可能应该将列名作为类的私有(private)静态成员,或者使用存储过程并让数据库处理列名的细节。

哦,如果有人要求您针对尚未设计的数据库进行编码,请与他们交谈。您至少可以确定一些事情。如果没有,那么一定要走存储过程路线,让他们担心在事情发生变化时正确获取列名。

关于java - 使用枚举来**存储**行和列的数据库名称是不是有点过分了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345383/

24 4 0
文章推荐: c# - 通过 ref 将函数传递给委托(delegate)有区别吗?
文章推荐: c# - 客户端在 selenium 测试期间无法连接到服务器
文章推荐: c# - .Net开源集群产品? ...像 Terracotta
文章推荐: java - EJB3 相关 ID
搜寻专家
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com