2012-02-20 23 views
0

私の "Business Objects"に "Admin Tables"を表示する適切な方法は何ですか?私は私のアドレスオブジェクトで次のことがあります。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")} 

EDIT

これは私が他のプログラマの勧告にKeyValuePair<>に置き換えていますものです。

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

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

    public string CountyName { get; set; } 
} 

2つ目の方法と3番目の方法の方が良い方法がありますか?

+1

KVPの値はデータベースから取得していますか?あなたのマジックナンバー/キャラクターが少し魔法にならないように、それらを列挙型に抽出することは可能ですか? – 48klocs

+8

この状況では 'KeyValuePair'の使用を勧めません。開発者は「キー」または「バリュー」が実際に何であるかを明確に見ることができません(「郡」の「ショート」キーは何ですか?)。自分や職場の人生をより楽にするために、適切なプロパティ名を持つ独自のタイプを作成します。 – Lukazoid

+0

私は無関係なメンバーを削除しました。同意しない場合は元に戻してください。 – CodesInChaos

答えて

3

私はちょうどあなたのコードを実行し、期待どおりに動作しました。

countryプロパティが正しい値= 32Key及び= La CrosseValueを有しています。


新しいコードは醜いです。私はCountryプロパティのセッターを削除するか、Countryクラスを不変にします。この種の二重変異性は、起こるのを待っているバグです。

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

+0

ほとんどの場合、実行時に国名を変更する必要はありません。ロード時に1回だけ変更します。それは国が常に名前を変えるようではありません。しかし、もしあなたがそうしたとしても、変化はカントリークラス自体の中から起こるべきであり、国がちょうど使われている場所を経由するのではない。例えば、新しい国の定義ファイルをロードすることによって。 – CodesInChaos

0

Lukazoidがこれを行うにはない、なぜ良いヒントを与え、バス実際には、あなたが表示されて初期化がうまく動作します。あなたはデバッガを使って簡単にこれを証明することができました。質問は何ですか?

3

KeyValuePair<T1, T2>この場合、あなたは何も買っていません。

なぜ明示的ではないのですか?

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

または別のバージョンを使用すると、2つのプロパティを持つタイプCountyを定義することになりますが、その後、代わりにその型のプロパティを持っています。

コードでは、明快さが王です。

0

Countryオブジェクトを作成して、ショートとストリングが表すはずのものがわかるようにします。

関連する問題