Лучший способ представить поле в объекте, который приходит и ID + имя из БД? - PullRequest
1 голос
/ 22 марта 2011

У меня есть этот (упрощенный для иллюстрации) объект, который представляет собой таблицу с полями (id, тип, марка, модель, цена) из БД. Для типа, бренда и модели сохраняются только идентификаторы, которые имеют отношение к базе данных типов, брендов и моделей. С помощью нескольких соединений объекты загружают данные и получают также свойства Name для них:

public class Car
{

    public int TypeId;
    public int BrandId;
    public int ModelId;
    public decimal Price;

    public string TypeName;
    public string BrandName;
    public string ModelName;

}

Это позволяет, по моему мнению, "грязную" структуру объекта. Каков наилучший способ загрузить это в более структурированные объекты, такие как:

public class Car
{
    public Definitions.CarTypes Type;
    public Definitions.CarBrand Brand;
    public Definitions.CarModel Model;
    public decimal Price;
}

Меня интересует, как будут заполняться данные внутри объекта при возврате запроса из базы данных. Является ли использование конструктора (thisCar.Brand = new CarBrand (reader ["id"], reader ["name"]); для каждого поля хорошим способом сделать это?

1 Ответ

0 голосов
/ 22 марта 2011

Мое первое желание - использовать Enums.Перечисления могут быть разных базовых типов, но по умолчанию используется Int.Вы можете явно установить значение int каждого элемента в Enum, что полезно для того, чтобы они соответствовали некоторому другому предопределенному списку (например, коды ошибок или в вашем случае: уникальные идентификаторы элементов в вашей БД).

Ваш код, который анализирует ваш набор данных и создает ваши объекты "Car", может просто привести эти идентификаторы строк базы данных в соответствующий Enum.

class Program
{
    static void Main(string[] args)
    {
        Car myCar = new Car();
        myCar.Brand = (CarBrand)1;
        myCar.Model = (CarModel)10;
        myCar.Type = (CarType)3;

        Console.WriteLine("You drive a {0} {1} {2}. Niiiice.", myCar.Brand, myCar.Model, myCar.Type);
        Console.ReadLine();

    }
}

public class Car
{
    public CarType Type {get; set;}
    public CarBrand Brand {get; set;}
    public CarModel Model {get; set;}
    public decimal Price {get; set;}
}


public enum CarBrand
{
    BMW = 1,
    Audi = 2,
    Ford = 5,
    Volkswagen = 23
}
public enum CarModel
{
    M3 = 10,
    R8 = 211,
    Mustang = 3,
    Passat = 4
}
public enum CarType
{
    Sedan = 3,
    Coupe = 10,
    Convertible = 21
}

Конечно, вы захотите выполнить некоторую проверку ошибок и т. Д. Один из недостатков Enums заключается в том, что вы находитесь в зависимости от требований к именованию полей C # и, возможно, style-cop, и поэтомуимеет смысл иметь свойство или служебный метод, который переходит к строковому ресурсу (например, RESX) и возвращает «FriendlyBrandName» или что-то в этом роде.

...