0

私のデータには次の構造があります。

Category0  
 -SubCategory0  
 -SubCategory1  
 -SubCategoryN  

Category1  
-SubCategory1_0  
-SubCategory1_1  
-SubCategory1_N  

カテゴリには、名前、説明、および一意の整数 ID があります。

例えば

Category = Ford Description = "USA Car" Id = 12345678  
-SubCategory: Name = Mondeo  Description = "Some text" Id = 12324       
-SubCategory: Name = Fiesta  Description = "Some text" Id = 9999   
-SubCategory: Name = Orion  Description = "Some text" Id = 123456   
-SubCategory: Name = Focus  Description = "Some text"Id = 8799  

リストは設計時にわかっているので、リストビューにバインドする必要があります。説明をリストビューの各行の表示テキストとしてバインドし、値 (名前と ID を持つオブジェクトまたは列挙型) を対応する値メンバーとしてバインドしたいと思います。

この情報を保存する最良の方法は何ですか? 多数の列挙を作成する必要がありますか? または、「Ford:Mondeo:Some Text: 12324」などの区切り文字列を使用してデザイナー モードでリストビューに直接バインドし、必要に応じて解析および抽出する必要があります。おそらく、データを id/description 値のカスタム属性を持つ厳密に型指定された列挙型に格納する方がよいでしょう。たとえば、文字列が説明で CarType がプロパティを持つクラスである辞書にバインドします: Make(Ford):enum, Model(Modeo ):enum と Id(12324):int?

4

2 に答える 2

0

通常、これを 2 つのクラスでモデル化します。

public class Model
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class Manufacturer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public List<Model> Models { get; set; }
}

比較のパフォーマンスが気になり、すべてのメーカー名とモデル名が正確にわかっている場合は、名前を列挙型に変更することを検討してください。また、これらのアイテムに名前でアクセスする場合は、名前をキーとして辞書に保持することを検討する必要があります。

于 2011-08-11T23:28:33.720 に答える
0

これは XML の完璧な使い方のように思えます。カテゴリを追加/削除したり、名前と説明の値を変更したりできます。単純なクラス構造に解析します...

public class ParentCategory : Category
{     
    public List<Category> SubCategories { get; set; }
}

public class Category 
{     
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; } 
}

そして、これらのクラスをビューにバインドするだけです。

設計時にわかっているからといって、大量の重複コードや冗長コードを作成する十分な理由にはなりません。これにより、プログラムの保守が非常に困難になります。はい、XML (または任意のデータ ファイル) に慣れていない人を探す方が簡単ですが、何かが変更された場合 (たとえば、カテゴリに別のプロパティを追加する必要がある場合)、すべてのクラス/列挙型を変更する必要があります。面倒で退屈。

編集:明確にするために、XMLと言うとき、それは私の好みの形式です。データをテキスト、CSV、お好みの形式で保存することもできます。XML の方が扱いやすいので、私は XML を好みます。

edit2: あなたの懸念はわかります ( if(carListView.SelectedValue == "Mondeo"))。システム全体や何をしようとしているのかを知る (または知りたい) ことなく、より一般的でオブジェクトに焦点を当てた方法で作業することをお勧めします。

if車の種類ごとに明細書が必要ですか?車に自分の仕事をさせてみませんか?

public class ParentCategory : Category
{     
    public List<Category> SubCategories { get; set; }
    public void DoThings()
    { 
        // look at SubCategories, print something, etc
    }
}

// and then get the item to do things!
((ParentCategory)carListView.SelectedValue).DoThings();

このようにして、リスト全体をループすることはありません。繰り返しますが、行数を抑えてください。

于 2011-08-12T00:06:44.833 に答える