我們有一個在特定行業中使用的程序,並且具有特定於該行業的字符串。現在我們有了可以在其他行業使用的情況,我們希望爲該行業定製字符串而不重複我們的代碼庫。行業特定資源的實施
問題空間與本地化看起來非常相似。我們是否要爲每個行業設立單獨的資源組合?如果是這樣,我們什麼時候會選擇使用哪個程序集,我們可以在安裝的時候這樣做,還是需要在編譯時?我們如何保持單獨的資源程序集同步,以便每條消息中出現相同的消息密鑰?
這樣做的最好方法是什麼?
我們有一個在特定行業中使用的程序,並且具有特定於該行業的字符串。現在我們有了可以在其他行業使用的情況,我們希望爲該行業定製字符串而不重複我們的代碼庫。行業特定資源的實施
問題空間與本地化看起來非常相似。我們是否要爲每個行業設立單獨的資源組合?如果是這樣,我們什麼時候會選擇使用哪個程序集,我們可以在安裝的時候這樣做,還是需要在編譯時?我們如何保持單獨的資源程序集同步,以便每條消息中出現相同的消息密鑰?
這樣做的最好方法是什麼?
讓我重新措辭:有你有一個工業應用,其能夠在各個行業和唯一的東西都是不同的資源(即字符串,佈局,也許圖像和聲音)一起使用。其他代碼保持不變。
在這種情況下,您的問題不僅僅是相似,它實際上與本地化相同。因此,您可以使用Satellite Assemblies。
現在,如果您想單獨打包創建的應用程序或將兩個問題空間分配給一個應用程序,則由您決定。
對我來說第一個看起來更真實的場景 - 您需要決定在哪個.resx文件中包含編譯時間(即在項目準備期間您將用問題空間資源覆蓋現有資源,然後繼續編譯,應該給你不同的應用程序風格;我也會在這種情況下修改它們的名字)。
後者將要求您在運行時手動實例化ResourceManager
以從有效的衛星程序集中讀取 - 它可能基於某個配置文件。這意味着更多的工作(你需要真正修改你的代碼),你最終將同時分發你的應用程序的兩種風格,那就是你無法控制你的客戶如何使用它。從商業角度來看,這可能有點危險。
EDIT(自我提醒:仔細閱讀整個問題)
不知怎的,我設法錯過安裝時間與編譯時間。我相信編譯時間就是答案,因爲我在配置驅動切換部分給出了同樣的理由:您會打包資源,並且您將無法控制客戶如何使用它。一些聰明的人會想出來,這是肯定的。
我會建議有一個帶有鍵值對的屬性文件。您目前擁有行業特定字符串的位置,請使用對屬性文件的調用替換它們。顯然你會將這些字符串緩存在某個容器中。我不知道C#容器 - Java會使用java.util.Properties
。
aerospace.props:
INDUSTRY_NAME=aerospace
INDUSTRY_START_YEAR=1903
manufacturing.props:
INDUSTRY_NAME=manufacturing
INDUSTRY_START_YEAR=1600
這個答案沒有解決提出的問題,它是一個.net特定的問題,而不是java。請刪除此答案,因爲它鼓勵其他人不回覆已回答的問題。 – 2011-05-02 01:05:32
它確實解決了這個問題。你正在尋找如何使你的東西是通用的,這解決了它。我發現很難相信你在C#中沒有Map? – corsiKa 2011-05-02 01:25:28
如果你不知道c#,請不要回答這個問題。您不具備對下列內容的評論:.NET資源程序集,在編譯和安裝時使用,同步。NET資源程序集,每個問題中都提到了這些。如果我們想要編寫我們自己的實現,我們可能會使用字典,但在.NET的很大程度上,實現可能已經存在。 – 2011-05-02 01:36:22
我討厭那個「聰明的人」:) – 2011-05-02 23:12:36