2013-04-29 55 views
3

對於產品名稱,我有一組有限的字符串。我也有一個Web服務發送這些產品名稱之一。不過,我需要以另一種格式發送產品名稱。翻譯硬編碼字符串的最佳做法

所以我需要一個格式化器/映射器在我發送消息之前的某個地方。

我只能做一些硬編碼的映射器類,它發生在一個參數,並返回一個硬編碼字符串,像這樣:

String mapper(String productName) { 
    switch (productName) { 
    case "product1": 
     return "prod1"; 
    case "product2": 
     return "prod2" 
} 

不過,我真的不喜歡這種方法,但我有一個困難時期冥思苦想提出更好的解決方案。任何人有更好的解決這個問題的辦法?

我正在考慮將映射存儲在數據庫中,然後爲這個映射創建一個DAO,而不是使用一個開關,它使用參數作爲鍵,然後查詢返回替代產品名稱的數據庫,但我不知道它是否是一個更好的解決方案。

有什麼想法?

*編輯*

忘記提到這一點:

原來的產品名稱是當前存儲在數據庫中。我將需要翻譯這些名稱而不修改當前的代碼/表格設置,即我無法編輯表格和當前類別,但如果需要,我可以創建新的表格/類別。

+3

你可以使用散列表。 – 2013-04-29 09:26:12

回答

1

使用數據庫是一個靈活的方法,讓您有機會在任何時間來適應映射,無需重新啓動任何東西。然而,在這種情況下,表現可能會令人擔憂。如果是這樣,請構建完整映射表的緩存併爲其設置定期刷新計劃。

+0

在這種情況下,性能不是問題。我想這是「要走的路」,因爲它也使得以後可以更容易地擴展,如果增加更多產品。 因此,一張帶有原始產品名稱的外鍵的表格,當然還有替代產品名稱應該可以做到這一點。 – Herter 2013-04-29 10:30:53

1

使用的枚舉(或一組整數)作爲ID爲產物1,2等

然後使用字典/圖/陣列/不管或一個get函數來獲取的名稱(或者「產品1」或「產品2」)。當你想使用這些類型時,不要使用字符串,因爲它們往往會在你的代碼中出現多次,如果你忘記在一個位置改變它,你會得到不一致的地方。

4

如何使用具有內容,如

product1=prod1 
product2=prod2 

和你的方法properties文件..

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

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

我認爲這種方法是最好的解決方案,其實問題是如何翻譯名稱,所以i18n樣解決方案很容易解決它 – 2013-04-29 09:59:20

+0

對不起,但我應該提到目前的產品名稱存儲在數據庫中,所以使用屬性文件不是一個選項。 – Herter 2013-04-29 10:27:27

+0

然後,如果您認爲將來需要多個翻譯,那麼我將創建一個包含翻譯的新表,如(密鑰,翻譯)或(鍵,格式/應用程序,翻譯)。 – 2013-04-29 12:17:08