2012-02-20 31 views
0

在我的「業務對象」中顯示「管理表」的正確方法是什麼?我在Address對象上有以下內容。使用KeyValuePair <>作爲屬性與獨立類與其他東西

public class Address 
{ 
    public int AddressID { get; set; } 
    public KeyValuePair<short, string> County { get; set; } 
    ... 
} 

現在我怎麼會將此對象實例,至於KeyValuePair<,>特性去?

我的猜測是:

var myAddress = new Address { AddressID = 3, County = new KeyValuePair<short, string>(32, "La Crosse")} 

編輯

這就是我與KeyValuePair<>另一個程序員的建議更換。

.....Address.cs..... 
public County County { get; set; } 

.....County.cs..... 
public class County 
{ 
    public short? CountyID { get; set; } 

    public string CountyName { get; set; } 
} 

在兩者之間還有更好的方法還是更好的方法?

+1

KVP的值是否來自數據庫?是否有可能將它們提取爲枚舉類型,以便您的魔法數字/字符不那麼神奇? – 48klocs 2012-02-20 17:04:35

+8

我建議不要在這種情況下使用'KeyValuePair';開發人員無法清楚地看到「Key」或「Value」實際上是什麼(「County」的簡稱「Key」是什麼?)。製作屬於自己的類型,使自己和同事的生活更輕鬆。 – Lukazoid 2012-02-20 17:06:43

+0

我已刪除不相關的會員,如果您不同意請回復。 – CodesInChaos 2012-02-20 17:08:18

回答

3

我剛剛運行了您的代碼,並按預期工作。

country屬性具有正確的值Key = 32Value = La Crosse


你的新代碼很醜。我要麼刪除Country屬性的setter,要麼使Country類不可變。這種雙重可變性,是一個等待發生的錯誤。

使類不可變,可能是正確的決定,因爲Id =>Name映射是固定的。

我會使用:

public class County 
{ 
    public short? ID { get; private set; } 
    public string Name { get; private set; } 

    private Country(short? id,string name) 
    { 
     ID=id; 
     Name=name; 
    } 
} 
+0

那麼如果一個'縣'的名字需要改變?這是一個很有可能的可能性。當想要實際更新現有產品時,創建新的「縣」並不合適。我很想聽聽你的做法是什麼。 – Lukazoid 2012-02-20 17:24:12

+0

大多數情況下,您不需要在運行時更改國家/地區名稱,只需在加載時更改一次。這並不是說國家一直在改變這個名稱。但即使你這樣做,改變也應該只發生在Country類內,而不是通過一個國家被使用的地方。例如通過加載一個新的國家定義文件。 – CodesInChaos 2012-02-20 17:31:08

0

Lukazoid給出了一個很好的提示,爲什麼不這樣做,其實公交車,你是顯示初始化將工作做好。使用您的調試器可以證明這很容易。什麼是問題?

3

KeyValuePair<T1, T2>在這種情況下買你什麼。

爲什麼不明確?

public class Address 
{ 
    public int AddressID { get; set; } 
    public int CountyCode { get; set; } 
    public string CountyName { get; set; } 
} 

或另一個版本是,你定義一個類型County與兩個屬性,然後有一個類型的屬性。

在代碼中,清晰度是重要的。

0

創建一個國家對象,以便清楚短語和字符串應該表示什麼。