我正在开发一个java应用程序,在我们收到xml时,xml包含来自全球许多地区的一些数据。所以xml看起来像这样
<Shipment>
<Region>
<name>China</name>
<calculatedValue>0.001</calculatedValue>
<deviation>-1<deviation>
</Region>
<Region>
<name>Russia</name>
<calculatedValue>0.091</calculatedValue>
<deviation>-1<deviation>
</Region>
<Region>
<name>UK</name>
<calculatedValue>2.001</calculatedValue>
<deviation>-12<deviation>
</Region>
// lots of other regions //
</Shipment>
我们有一个叫做Dock的pojo。
public class Dock {
private Map<SupportedRegion, Region> regionalShipmentDetails = //
//some field and getter setter.
getChinaShipmentDetails () { this.regionalShipmentDetails.get(SupportedRegions.CHINA)}
setChinaShipmentDetails (Region china) {
this.regionalShipmentDetails.get(SupportedRegions.CHINA).add(china)
}
getRussiaShipmentDetails () {//same for russia}
setRussiaShipmentDetails (Region russia) {same for russia}
}
我们从这个xml中提取区域创建一个region对象并添加到Dock对象。 现在我们还维护一个枚举,它定义了我们的应用程序支持的所有内容。
enum SupportedRegions{
CHINA (201, "APAC"),
RUSSIA (202, "EUR")
}
现在我们也要求支持其他地区。现在我们想重构我们的代码,以便支持团队能够轻松配置以支持区域。
我们希望将其移出代码并在具有最小更改的属性文件中进行维护。 我们有一些调用代码,如。
dock.getChinaShipmentDetails()
dock.getRussiaShipmentDetails ().
现在,如果我删除枚举并移动属性中的所有区域。我将不得不修改我的Dock类到这样的
private Map<String, Region> regionalShipmentDetails = //
//some field and getter setter.
getShipmentDetailsForRegion (String region) { this.regionalShipmentDetails.get(region)
}
}
现在我的来电者将成为
Region china = dock.getShipmentDetailsForRegion ("region")
现在我不想在代码中引入硬编码字符串值,因为这个更改会影响我的调用者类,现在它成为调用者类传递正确reion的责任,以前Dock只暴露了前面区域支持的方法。
在编译时是否有任何方法我不必使用硬编码字符串。
答案 0 :(得分:0)
您可以编写一个脚本,该脚本使用XML文件或其他格式的枚举或静态最终变量生成代码。然后在构建过程中自动运行此脚本。据我所知,像Ant这样的构建工具可以做到这一点。