2011-05-30 43 views
2

我有如下因素的問題:較好的是:一個枚舉或單

什麼是使用代碼的狀態,枚舉或單張的首選方式是什麼?

我有一個數據庫存儲狀態值與他們的ID。如果de DB中的狀態更改也需要對代碼進行一些更改。

現在還沒有人根據慣例更喜歡什麼?

我一直在找互聯網,但找不到明確的答案。

+0

什麼是「枚舉單身人士「? – 2011-05-30 08:56:33

+1

不知道我明白這個問題。什麼是「單身的枚舉」?如果你的意思是「枚舉或單身人士」,仍然沒有意義。枚舉是一種用於定義一組命名常量的值類型。單例是一種模式,您可以在其中定義要由整個應用程序使用的某個實例。 – RPM1984 2011-05-30 08:57:44

+0

你是什麼意思? – 2011-05-30 08:57:50

回答

5

它部分取決於您的狀態的ID是否具有保證值,或者ID是否可以更改每個數據庫(通過IDENTITY)。就個人而言,對於我更喜歡​​固定的狀態 - 這給你最大的靈活性和最小的開銷 - 你可以選擇使用枚舉(或者如果更方便的話可以使用一些常量),並且你永遠不必添加間接尋址,即「get the id那就是open「。

雖然這並不總是可行,但當它不是不是它仍然絕對有用緩存和重新使用它們(以避免擊中數據庫的查找)。但是,我會避免使用單例,尤其是因爲如果您需要與多個數據庫交談,它將無法很好地發揮作用 - 每個數據庫中的ID都可能不同。但是,任何合適的緩存實現(或者IoC/DI)都應該允許您存儲適當的數據(可能是某種字典)。單身也只是有點痛一般如果你喜歡測試等

但是:枚舉和固定的id值是一個更簡單。

注意下任何的實施,改變了狀態列表是一個不平凡的操作,而不是它至少會是一個很大的UPDATE(或者,如果你非正規化數)。

+0

感謝這使我很清楚 – 2011-05-30 09:12:46

3

如果您打算在整個應用程序使用狀態和整個然後是標準化的將是最適合的Enum

Enum Status 
{Open, Pending, Closed, Deferred} 

而且這使得代碼更可讀

+0

我還想爲枚舉添加初始化程序Open = 0,Pending = 1 ... – Reniuz 2011-05-30 09:21:53