java - 你把你的字典数据放在哪里?

标签 java dictionary enums

假设我的应用程序中有一组国家/地区。我希望这些数据会发生变化,但不会经常发生变化。换句话说,我不会将此集合视为操作数据(例如,我不会为 Country 提供 CRUD 操作)。

也就是说我必须将这些数据存储在某个地方。我看到有两种方法可以做到这一点:

  • 数据库驱动。创建并填充 Country 表。提供某种 DAO 来访问它(findById()?)。这样,客户端代码就必须知道国家的 ID(也可以是名称或 ISO 代码)。在应用程序方面,我将有一个国家类。

  • 应用驱动。创建一个枚举,我可以在其中列出我的系统已知的所有国家/地区。它也将存储在数据库中,但不同之处在于现在客户端代码不必具有查找方法(findById、findByName 等)和硬编码 Id、名称或 ISO 代码。它将直接引用特定国家/地区。

出于几个原因,我倾向于第二种解决方案。你是怎么做到的?

将此称为“字典数据”是否正确?

附录:这里的主要问题之一是,如果我有一个像 findByName("Czechoslovakia") 这样的查找方法,那么在 1992 年之后,这将不会返回任何内容。我不知道客户端代码将如何对此使用react(毕竟它有点期望总是返回 Country,因为,好吧,它是一个字典数据)。如果我有类似 findById(ID_CZ) 的东西,情况会变得更糟。很难找到所有这些依赖项。

如果我从我的枚举中删除 Country.Czechoslovakia,我将强制自己处理对 Czechoslovakia 的任何依赖。

最佳答案

在我处理过的一些应用程序中,数据库中只有一个“枚举”表,其中包含所有此类数据。它仅由两列组成:EnumName 和 Value,并且将像这样填充:

  • “国家”、“德国”
  • “国家”、“英国”
  • “国家”、“美国”
  • “水果”、“苹果”
  • “水果”、“香蕉”
  • “水果”、“橙子”

然后在应用程序执行开始时将其读入并缓存。优点是我们没有为每个不同的枚举类型使用几十个数据库表;如果我们需要更改数据,则无需重新编译任何内容。

这可以很容易地扩展以包含额外的列,例如指定默认排序顺序或替代 ID。

关于java - 你把你的字典数据放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/586042/

相关文章:

Java 泛型 : the type parameter T is hiding the type T

java - Spring boot 选择了错误的 CorsFilter

python - 如何在字典中存储一组图像,并使用python opencv检索它

C++:std::map 抛出 out_of_range 异常

c# - 我怎么知道项目在枚举中?

c# - C#更改枚举中的项目的int值

C11 - 通用选择中的枚举

java - JsonObject 未正确填充表格

java - 哪些操作保持顺序

python - 如何按两个元素对字典进行排序,只反转一个