2010-06-23 86 views
1

在其中一個金融Winform項目中,應用程序代碼必須使用諸如貨幣等值。在代表商業實體的對象模型中,有些字段需要保存諸如美元,歐元等貨幣值。該字段的值集合很可能會被限制爲其中一種標準貨幣,並且很少需要擴大新的貨幣。應用程序從GUI控件獲取貨幣輸入,該控件將來自另一個標準源的這些值並顯示爲下拉列表,儘管用戶可能直接向控件輸入值。應用程序的邏輯並不特別依賴於貨幣的值,並且不直接對這些字段執行特殊處理,這需要引用字段中包含的實際值。枚舉設計指南

現在問題:是否建議使用枚舉,枚舉USD,EUR等類似的值,以便接收到的代碼中的貨幣值可以通過枚舉進行驗證?如果不是,建議將貨幣值從下拉列表中輸入,以便在代碼中不需要額外的驗證?

回答

0

我建議你創建一個簡單的類或事件結構爲貨幣,同時也創造了當前定義的貨幣幾個靜態只讀成員:

class Currency 
{ 
    public static reaonly IEnumerable<Currency> Currencies = new List<Currency> 
    { 
     new Currency { Name = "USD", CurrencySign = "$" }, 
     new Currency { Name = "EUR", CurrencySign = "€" } 
    } 

    public string Name {get; private set;} 

    public string CurrencySign {get; private set;} 

    public override ToString() { return Name; } 
} 

它可以讓你輕鬆擴展貨幣名單,並從其他地方提取它然後靜態成員,如數據庫或Web服務,而不用重新調整應用程序。

0

如果代碼沒有處理貨幣值,並且以後可以添加新貨幣值,那麼我會將貨幣值編碼爲(數據)字符串而不是(硬編碼)枚舉值。

0

由於您有一組有限且固定的可能值,枚舉或預填充下拉比允許用戶輸入自己的值要好。 (枚舉可能更有效,因爲如果您的貨幣少於256種,它可以存儲在一個字節中)。另一種方法(如果您設想有一天可能需要添加另一種貨幣)將從XML配置文件或數據庫表中填充一個驅動器,以便它是數據驅動的並且容易擴展(而不是需要重建應用程序以支持新貨幣)

如果您計劃對代碼進行模糊處理 - 一旦處理了密碼,您就無法將枚舉值轉換爲文本(因爲它們將會「混亂」),因此請小心使用枚舉類型你不能再使用反射來在枚舉值和文本之間進行轉換(用於將UI控件和/或序列化填充爲文本格式)

0

IMO你應該使用允許的值創建一個枚舉並驗證輸入。原因是因爲你可能有一個下拉式界面,但沒有什麼能夠阻止其他界面使用簡單的文本輸入。