2011-08-11 61 views
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 

該列表在設計時已知,我需要綁定到列表視圖。我想要將Description作爲顯示文本綁定到列表視圖的每一行上,並將值(一個對象或一個名稱和Id的枚舉)作爲相應的值成員。

什麼是存儲此信息的最佳方法?我應該創建大量的枚舉嗎?或者我應該使用分隔字符串(例如「Ford:Mondeo:Some Text:12324」)以設計器模式直接綁定到列表視圖,然後根據需要進行解析和提取。也許最好是將數據存儲在強類型的枚舉中,使用id/description值的自定義屬性,例如綁定到字典,其中字符串是描述,CarType是具有屬性的類:Make(Ford):enum,Model(Modeo ):枚舉和Id(12324):int?如果您擔心在比較性能

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; } 
} 

,並且你確切地知道所有的製造商和型號名稱,你應該考慮的名稱變更爲枚舉:

+1

數據可能多久改變一次?它需要容易更新嗎? –

+0

不是很頻繁。更改代碼可以確保更新。我關心的是在列表視圖上進行弱類型比較,比如:if(carListView.SelectedValue ==「Mondeo」) – guazz

+0

顯然,我更喜歡if(carListView.SelectedValue == CarMode.Modeo)... – guazz

回答

0

通常,您將有兩個類建模。 此外,如果您要按名稱訪問這些項目,則應考慮將其保存在名稱爲密鑰的字典中。

+0

如果超過3或4班,這會變得非常不整潔。 –

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,因爲它更容易處理。

編輯2: 我看到您的關注(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(); 

這樣就沒有循環遍歷整個列表。再次,保持你的線數。