多国家数据库表和Java对象

时间:2012-02-18 13:47:17

标签: java design-patterns

在工作中我们有一个应用程序,起初是为特定国家开发的。现在,新客户对该应用程序感兴趣,但此客户端来自其他国家/地区。我们必须改变一些对象来重新呈现新的国家。

  • 国家1,属性A,B,C,D,E因此java和数据库包含A,B,C,D,E

  • 新国家2,属性A,D,F,G,H

我们提出的解决方案。

数据库:

  • 为新国家/地区

  • 创建新表格
  • 只需将F,G,H添加到当前表

Java:

  • 使用A,D创建当前地址摘要,然后创建一个特定于国家/地区的实现(有趣且清晰,但增加了使用界面的痛苦,因此您必须始终键入强制转换)

  • 只需将F,G,H添加到地址(找到一个不干净的解决方案,知道要添加新国家的日期最终可能会向对象添加I,J,K)

  • 修改当前对象以具有公共属性和一些通用字段,如info1,info2。 (找到一个很好的解决方案,但通过使用info1,info2 ......在业务逻辑中使代码不清楚)

任何人都知道这种问题的良好模式吗?

此致

1 个答案:

答案 0 :(得分:2)

好的,在澄清评论之后,我的理解是:

  • 您已拥有Address类和相关数据库表
  • 每个国家/地区都需要为每个地址
  • 设置一组不同的地址行
  • 每个国家/地区代码的行为并没有特别不同(即地址的行为方式类似,除了它们有不同的地址线)

一般情况下,当差异实际上只是纯数据时,我会避免创建新类。所以有两个不同的Address类似乎是一个坏主意,无论你是否从一个基类继承它们。此外,继承层次结构通常不会很好地映射到数据库。

我认为最好的解决方案是将每个国家/地区的属性存储在HashMap或类似的东西中,然后确定哪些地址行适用于每个国家/地区。为简单起见,每个地址可能包含HashMap<String,String>,即键(地址行名称)和值(地址数据)都使用字符串。

如果你这样做,那么你对你为每个国家设置的属性有很大的灵活性,如果你在某个时候添加第三个国家,你可能不需要任何代码更改 - 只需要一组新的地址行

在数据库中,我将表示两个表中的数据:Address和AddressLine,具有明显的1对多关系。