2009-11-28 23 views
1
public class Fruit 
{ 
    // choose one 
    public int Id { get; set; } 
    public int FruitId get; set; } // redundant or usefully more descriptive? 

    // choose one 
    public string Name { get; set; } 
    public string FruitName { get; set;} // redundant or usefully more descriptive? 
    public string Fruit { get; set; } // or what about this? 
} 

哪個是您的水果識別號碼和名稱的首選約定?爲什麼?還有其他例子,你會回答不同嗎?何時,如果有的話,一個屬性的名稱是否包含該類的名稱?

回答

7

一般來說,屬性名稱應該根據自己命名,而不是類名。

五種情況下的類名可能是作爲類的部件上的前綴或後綴有用:

  1. 所需的屬性名是在您的語言的保留字。例如,FruitType而不是Type。在大多數情況下,最好將其他名稱命名爲財產。

  2. 其中類作爲工廠並返回其自身的實例。例如,如果Fruit有一個名爲「GetFruitById」的靜態方法返回一個水果。在這種情況下,您可能會更好地爲該方法提供單獨的FruitFactory類。

  3. 其中類包含其他類型的其他東西。在你的例子中,如果Fruit是一個顯示水果進化鏈接的圖表,那麼每個Fruit實例都可以包含一個名爲「DescendantFruitList」的水果列表。有機會,你可以放棄「水果」一詞,它仍然是完美的描述。

  4. 域模型中類的名稱與常用編程命名約定中使用的單詞相匹配。示例:表示文字(真實世界)Factory,List,Dictionary等的對象,還需要在編程中爲相關類使用相同的單詞。

  5. 與O/R映射到數據庫的兼容性或其成員正好具有相同單詞的外部接口的實現。例如,如果Fruit實現現有的IFruitStandProduct接口。在這種情況下,您對命名的巧合不負任何責任。

9
public class Fruit 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

我知道這些屬性是Fruit的屬性,所以爲什麼重複這個名字? SomethingId是我的外鍵屬性。

4

在我看來,幾乎總是IdName是首選,並建議不要重複指定類名稱。但是,一個明顯的例外情況是,IdName指的是內部標識符或名稱,而FruitNumberFruitName指的是實體的「真實世界標識符」或「顯示名稱」,並且出於某種原因您不想將其命名爲DisplayName

-1

從來沒有。

永遠。

說真的。

+0

雖然我同意你的看法,也有在BCL許多屬性包含類的名稱(或它的一部分):PropertyInfo.PropertyType,DbParameter.ParameterName ... – 2009-11-28 23:53:01

2

如果客戶已經做了,我只會在屬性名稱中冗餘地指定類名。保持無處不在的語言是值得的。

1

我有時需要在這樣的情況下做到這一點(很少):

class Fruit { 
public int ID {get; set;} 
} 

class Apple : Fruit { 
// I want to call this ID also but it refers to a different ID than the base ID 
public int AppleID {get; set;} 
} 
相關問題