2009-07-28 77 views
1

可以說我有一個枚舉表是這樣的:製作業務代碼的可讀性,數據庫枚舉

id name desc 
0 Normal Normal shipping 
1 Fragile Fragile, handle with care 

和我有一些業務規則的順序

double ShippingPrice(Product p) 
{ 
    if (p.ShippingType == 1) // Fragile 
    return GetFragileShippingPrice(p); 
    else 
    return GetNormalShippingPrice(p); 
} 

也許不是最好的例子上。但重點是,你如何使「p.ShippingType == 1」 部分可讀。 當下一個人來維護此代碼時,他必須找到生產數據庫,並查詢每個業務規則的表以瞭解他們的工作。

我認爲只是在代碼中創建一個枚舉只是重複數據庫中的數據,但這似乎並不是一個好的解決方案。

回答

0
enum ShippingType : int 
{ 
    Normal = 0, 
    Fragile = 1 
} 

double ShippingPrice(Product p) 
{ 
    if (p.ShippingType == ShippingType.Fragile) // Fragile 
    return GetFragileShippingPrice(p); 
    else 
    return GetNormalShippingPrice(p); 
} 

然後,你將不得不從表中枚舉自動生成的(由類似的CodeSmith創建)在你的數據庫。

1

我不認爲你會逃脫除了手動編輯你的枚舉或使用代碼生成創建它以外的任何東西。您可以使用t4模板創建它,從中可以從數據庫中獲取信息或從其他生成方式獲取信息。

無論哪種情況,您都希望在編譯時提供它們,以提高安全性和易用性。當然,你可以創建動態枚舉,就像在bnkdev的帖子中冗長的討論鏈接一樣,但是如果你考慮如何使用它們,你將會和常數一樣好,這會打破目的。