3个表,3个类,有助于有效地设计我的课程

时间:2009-10-16 15:06:51

标签: c# oop

我有3个数据库表,它们都有相同的5列。 它们的不同之处在于表#2和表#3中各有一个ID列。

我不想为此创建3个单独的类,但问题出在我的数据库帮助器类中我有一个加载类的方法,如:

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

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

}

我不想创建3个单独的加载助手方法,并且必须在所有这些方法上复制代码。 (我不介意创建3,但只需设置每个字段不同的字段)。

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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;
}

答案 2 :(得分:1)

您可以通过带有BaseTableName属性的GetSchemaTable获取表名,并相应地检索您的字段。

答案 3 :(得分:0)

如果您不介意使用反射,可以根据您的需要调整此类内容:

Generic List Provider

你只需要返回一个T而不是它们的列表。

希望它有所帮助。