Как сохранить список данных времени разработки - PullRequest
0 голосов
/ 12 августа 2011

У меня есть следующая структура в моих данных:

Category0  
 -SubCategory0  
 -SubCategory1  
 -SubCategoryN  

Category1  
-SubCategory1_0  
-SubCategory1_1  
-SubCategory1_N  

Категория будет иметь ИМЯ, описание и уникальный целочисленный идентификатор

например.

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  

Список известен во время разработки, и мне нужно привязать его к списку. Я хотел бы связать описание в качестве отображаемого текста в каждой строке списка и значения (объект или перечисление с именем и идентификатором) в качестве соответствующего элемента значения.

Каков наилучший способ хранения этой информации? Должен ли я создать большое количество перечислений? Или я должен привязать напрямую к списку в режиме конструктора, используя строки с разделителями, такие как «Ford: Mondeo: Some Text: 12324», а затем анализировать и извлекать по мере необходимости. Возможно, было бы лучше, чтобы данные хранились строго типизированными перечислениями с пользовательскими атрибутами для значений идентификатора / описания, например, привязка к словарю, где строка - это описание, а CarType - класс со свойствами: Make (Ford): enum, Model (Modeo ): enum и Id (12324): int?

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Это звучит как идеальное использование для 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 (или любым файлом данных), но если что-то изменится - вам нужно добавить другое свойство, например, в категории - вам нужно будет перейти и изменить каждый отдельный класс / перечисление. Грязный и утомительный.

edit: Просто чтобы уточнить, когда я говорю XML, это всего лишь мой предпочтительный формат. Вы также можете хранить свои данные в виде текста, CSV, независимо от вашего любимого формата. Я предпочитаю 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();

Таким образом, нет никакого обхода целых списков. Опять же, уменьшите количество строк.

0 голосов
/ 12 августа 2011

Обычно вы моделируете это двумя классами:

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

Если вас беспокоит производительность в сравнениях, и вы точно знаете названия всех производителей и моделей, вам следует подумать об изменении названий в перечисления. Кроме того, если вы будете получать доступ к этим элементам по имени, вам следует рассмотреть возможность их хранения в словаре с именем в качестве ключа.

...