Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 翻译硬编码字符串的最佳实践_Java_Hardcoded - Fatal编程技术网

Java 翻译硬编码字符串的最佳实践

Java 翻译硬编码字符串的最佳实践,java,hardcoded,Java,Hardcoded,我有一个产品名称的有限字符串集。我还有一个web服务,它发送其中一个产品名称。但是,我需要发送另一种格式的产品名称 所以在发送消息之前,我需要一个格式化程序/映射程序 我可以制作一些硬编码的映射器类,它接受一个参数并返回如下硬编码字符串: String mapper(String productName) { switch (productName) { case "product1": return "prod1"; case "product2":

我有一个产品名称的有限字符串集。我还有一个web服务,它发送其中一个产品名称。但是,我需要发送另一种格式的产品名称

所以在发送消息之前,我需要一个格式化程序/映射程序

我可以制作一些硬编码的映射器类,它接受一个参数并返回如下硬编码字符串:

String mapper(String productName) {
    switch (productName) {
    case "product1":
        return "prod1";
    case "product2":
        return "prod2"
}
然而,我真的不喜欢这种方法,但我很难想出更好的解决方案。有谁能更好地解决这个问题

我正在考虑将映射存储在数据库中,然后为该映射创建一个DAO,它使用参数作为键,然后查询数据库,返回替代产品名称,但我不确定这是否是一个更好的解决方案

有什么想法吗

*编辑*

忘了提一下:

原始产品名称当前存储在数据库中。我需要在不修改当前代码/表格设置的情况下翻译这些名称,即我无法编辑表格和当前类,但如果需要,我可以创建新的表格/类。

使用枚举(或整数集)作为产品1、2等的ID


然后使用dictionary/map/array/which或get函数获取名称(product1或product2)。当您想使用这些类型时,不要使用字符串,因为它们往往在代码中出现多次,如果您忘记在某个位置更改字符串,则会出现不一致的情况。

使用包含以下内容的
属性
文件如何

product1=prod1 
product2=prod2
还有你的方法

{
   //initializer
   Properties props = new Properties();
   props.load(...);
}

String mapper(String productName) {
   props.getProperty(productName);
}

使用数据库是一种灵活的方法,使您可以随时调整映射,而无需重新启动任何操作。但是,在这种情况下,性能可能会受到关注。如果是这样,请为完整的映射表建立一个缓存,并为其设置一个定期刷新计划。

您可以使用hashmap。我认为这种方法是最好的解决方案,实际上问题是如何翻译名称,因此类似i18n的解决方案很容易解决。对不起,但我应该提到,当前的产品名称存储在数据库中,因此,使用属性文件不是一个选项。然后我将创建一个包含翻译的新表,例如(键,翻译)或(键,格式/应用程序,翻译),如果您认为将来需要多个翻译。在这种情况下,性能不是问题。我想这是“前进的道路”,因为如果增加更多的产品,这也会使以后的扩展更容易。因此,使用外键指向原始产品名称的表,当然还有替代产品名称,应该可以做到这一点。。