首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有潜在多语言需求的数据库中定义“类型”的最佳实践设计模式?

在具有潜在多语言需求的数据库中定义“类型”的最佳实践设计模式?
EN

Stack Overflow用户
提问于 2012-02-09 20:22:59
回答 3查看 310关注 0票数 1

我的问题更具体的是:

我希望多个前端的用户可以看到数据库行的“类型”。为了方便起见,假设我有一个person表,类型可以是StudentTeacherParent等。

具体的程序应该是带有hibernate的java,但是我怀疑这对这个问题是否重要,但是假设我的数据是在实体bean中建模的,一个Person“类型”字段是一个包含我的3个选项的枚举,理想情况下,我希望我的Person对象有一个getType()方法,我的前端可以使用它来显示类型,而且我还需要一种方法让我的前端知道潜在的类型。

使用enum方法,我有这个功能,但我没有的是无需重新编译就可以轻松添加新类型的能力。

因此,我的下一个想法是将我的类型放到一个配置文件中,并简单地将它们作为字符串存储在数据库中。我的getType()方法可以工作,但是现在我的前端必须加载一个配置文件来获取潜在的类型,现在没有什么可以让它们保持同步,我可以从我的配置文件中删除一个类型,数据库中的类型将不指向任何类型。我也不喜欢这样。

最后,我创建了一个PersonTypes数据库表,这个表有一个代表type_id的数字和一个定义类型的string。这是可以的,如果设置了外键,我不能删除我正在使用的类型,我的前端将需要看到潜在的类型,我想最好的方法是提供一个使用hibernate层的服务来做这件事。

这种方法的问题是,我的类型在数据库中都是英文的,并且我希望我的应用程序(最终)支持多种语言,因此我需要某种属性文件来存储这些类型的标签。那么,我是否有一个纯粹包含整数的PersonType表,然后是一个描述每个整数标签的属性文件?这似乎是倒退的?

有没有一个通用的设计模式来实现这种行为?或者,有没有人能建议一个好的方法来做到这一点?

致以敬意,

Glen x

EN

回答 3

Stack Overflow用户

发布于 2012-02-09 20:38:19

我会采用您所描述的最后一种方法。将类型信息放在单独的表中应该是足够好的,它可以让你利用SQL的所有好处来管理额外的约束(类型可能是唯一的,外键检查将保证你在删除一些记录时不会引入任何不正常的行为)。

当每种类型都有在属性文件中定义的i18n值时,你就是安全的。如果删除了该类型,则不会使用此值。如果需要,您可以在运行时更改属性文件。

但它会让你拥有这样的方法:

代码语言:javascript
复制
public String getName(PersonType type, Locale loc) {
  if (loc.equals(Locale.EN)) {
   return type.getEnglishName();
  } else if (loc.equals(Locale.DE)){
   return type.getGermanName();
  } else {
    return type.getDefaultName();
  }
}
票数 0
EN

Stack Overflow用户

发布于 2012-02-09 20:43:38

国际化动态值总是很困难的。存储类型的最后一个方法是正确的。

如果你想要i18n它们,你可以在你的应用中使用资源包作为属性文件。这会迫使您修改属性文件,并在每次添加新类型时重新部署和重新启动应用程序。如果在资源包中找不到类型,也可以回退到存储在数据库中的英文字符串。

或者,您可以实现一个自定义ResourceBundle类,它直接从数据库获取它的键和值,并有一个额外的PersonTypeI18n表,其中包含您希望支持的所有语言环境的翻译。

票数 0
EN

Stack Overflow用户

发布于 2012-02-09 20:40:27

您可以使用以下做法:

  1. 使用singleton设计 cashe框架,如EhCashe,适用于一般类型的人员,并在需要时重新加载。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9210764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档