Я работаю над 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>
У нас есть одно pojo под названием Dock.
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, создаем объект области и добавляем объект 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 был подвержен методу только для поддерживаемых регионов.
Есть ли какой-либо способ во время компиляции, я не должен использовать hardcoded string.
Вы можете загружать константы из файлов свойств во время выполнения, без возможности загрузки времени компиляции – Sanjeev