2009-10-16 1 views
0

У меня есть 3 таблицы базы данных, все они имеют одинаковые 5 столбцов. Они отличаются тем, что таблица №2 и таблица №3 имеют в них другой столбец идентификатора.3 таблицы, 3 класса, помощь в разработке моих классов эффективно

Я не хочу, чтобы создать 3 раздельные классы для этого, но проблема заключается в моем хелперов базы данных класса У меня есть метод, который загружает классы, как:

public static LoadClass1(SqlDataReader reader) 
{ 
    Class1 c1 = new Class1(); 

    c1.prop1 = (int)reader["prop1"] 

} 

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

ответ

3

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

//Psuedo code, obviously not exact 
//Don't hate 
public abstract class Core 
{ 
    int field1; 
    int field2; 
    int field3; 
    int field4; 
    int field5; 
} 

public class Sub1 : Core 
{ 
    field 6; 
} 

... 

public static void LoadCore(Core c, DataTable dt) 
{ 
    c.field1 = dt.getField1(); //Really a database value 
    c.field2 = dt.getField2(); 
    c.field3 = dt.getField3(); 
    c.field4 = dt.getField4(); 
    c.field5 = dt.getField5(); 
} 

public static Sub1 LoadSub1() 
{ 
    Sub1 s = new Sub1(); 
    LoadCore(s, MY_DATA_TABLE); 
    s.field6 = MY_DATA_TABLE.getField6(); 
} 
+0

Сделать «LoadCore» частным методом – cortijon

1

Возможно, вы можете создать базовый класс со всеми общими полями, а затем другие классы, которые расширят базовый класс, содержащий дополнительные поля.

то, что я имел в виду

class MyBase 
{ 
    public MyBase() 
    { 
    // load the base class stuff. 
    } 
    int f1; 
    int f2; 
    int f3; 
    int f4; 
    int f5; 
} 

class MyClass2 : MyBase 
{ 
    public MyClass2() : base() 
    { 
    // load the MyClass2 f6 
    } 

    int f6; 
} 

class MyClass3 : MyBase 
{ 
    public MyClass3() : base() 
    { 
    // load the MyClass3 f7 
    } 

    int f7; 
} 
0

Если вы не возражаете, используя отражение, что-то подобное может быть адаптирована в соответствии с вашими потребностями:

Generic List Provider

Вы бы просто нужно возвращать одну T вместо списка из них.

Надеюсь, это поможет.

1

Вы можете получить имя таблицы через GetSchemaTable с использованием свойства BaseTableName и получить соответствующее поле.

Смежные вопросы