2012-09-12 74 views
2

對業務層中單獨的類來存儲枚舉定義的普遍共識是什麼?這是不好的做法嗎?這是否符合良好的n層設計?目前,我的枚舉定義與其他類似,我認爲是相關的類,但我覺得它們應該放在一個地方。這實際上是一個主觀問題,並且與我如何構建解決方案的其餘部分有關?單獨的枚舉類?

+0

你是否複製不同層的枚舉定義/名稱? – Oded

回答

6

在單獨的類

保持枚舉在這種情況下你折騰無關定義爲一類,幾乎沒有好處。

定義枚舉嵌套式類涉及到

當你在一個類中持有枚舉,你可能會碰到命名的煩惱:

class Foo 
{ 
    public enum SomeType { /* ... */ } 
    public SomeType SomeType { get; set; } 
} 

即SOMETYPE是這會給出一個錯誤已經定義。

它可能只是歸結到個人的口味,但多數情況下我把我的枚舉與它們相關的類一起,沒有嵌套他們:

public enum SomeType { } 
public class Foo { } 

我很想多次讓他們嵌套(我們談論的當然是公共枚舉),但命名問題是不值得的,例如:

class Foo 
{ 
    public enum Enumeration { } 
} 

那麼我可以用這樣的枚舉Foo類之外,爲:Foo.Enumeration,但下面的聲明(在相同的命名空間中):

enum FooEnumeration { } 
class Foo { } 

給出類似的結果,因爲您只需不必鍵入'。'。當你引用枚舉:FooEnumeration。此外,後者允許你這樣做:

class Foo 
{ 
    public FooEnumeration Enumeration { get; set; } 
} 

這將導致前面提到的命名衝突。

摘要

當使用具有強大的功能轉到IDE,它在我看來,命名問題比枚舉定義的「物理」的定位更爲重要。

9

我真的不明白你爲什麼要在中放置一個枚舉 - 也許你的意思是文件?

我個人有的單獨文件,每個枚舉與枚舉的名稱。

我把這個文件放在enum被使用的地方,並相應的命名空間。

如果要在程序集/名稱空間之間共享枚舉,我將使用最小的共享名稱空間,因此它對於使用的名稱空間是可見的。

讓枚舉接近它們的使用位置將使代碼分離成稍微容易一些的項目(如果需要的話)。

我沒有看到將它們全部放在一個文件中的重點 - 導航方面,Visual Studio具有足夠多的導航功能,而這並不是必需的。

+0

同意,儘管我已經看到很多在一個類中使用枚舉的生產代碼。 – KingCronus

+0

@KingCronus - 如果枚舉僅在類中使用並且對它是私有的,那麼這可能是我對規則的例外。 – Oded

1

我更喜歡在我的項目中爲所有常量和枚舉分開類,它提高了代碼的可讀性。您應該這樣做,特別是如果您在業務層和其他層中引用Comman proj時。但是如果爲了Constant/Enum類而添加不必要的引用,那麼在同一個項目中使用它們會更有意義。

public class Enumerations 
{ 
public enum Gender{ 
    Male = 0, 
    Female = 1, 
    Unknown = 2 
} 
} 

當你消耗的,你可以不喜歡它

GetPerson(Enumeration.Gender gender) 
{ 

} 
+2

'Enumeration.Gender'比'Gender'更具可讀性嗎?好吧,我想美麗真的*是在旁觀者的眼中。 –

+0

看着Enumeration.Gender你知道它是一個枚舉。 只是「性別」可能會讓你把它看作是一個階級/結構。 –

+0

那麼你應該把所有的類放在一個名爲'@ class'的(外部)類中,並將所有的結構放在'@ structure'中,這樣你就可以立即知道它們是哪一種類型的。不,只是在開玩笑,你當然可以按你認爲合適的方式做,但我覺得它有點尷尬。 –