日期:2014-05-18  浏览次数:20798 次

关于三层结构的疑惑
为了学习三层结构的用法,在做一个学校班级管理的系统遇到的一些问题。
我是这样设计的

这是第一个类Student,记录学生信息
using   System;
namespace   Demo
{
public   class   Student
{
private   int   _id;
private   string   _name;
private   int   _age;

public   int   ID
{
get{   return   _id;   }
set{   _id   =   value;   }
}

public   string   Name
{
get{   return   _name;   }
set   {   _name   =   value;   }
}

public   int   Age
{
get{   return   _age;   }
set{   _age   =   value;   }
}

public   Student(   string   name,   int   age   )
{
Name   =   name;
Age   =   age;
}
}
}

这是第二个类Class,记录班级信息
using   System;

namespace   Demo
{
public   class   Class
{
private   Data   _data;
private   int   _id;
private   string   _name;
private   System.Collections.ArrayList   _students;

public   int   ID
{
get{   return   _id;   }
set{   _id   =   value;   }
}

public   string   Name
{
get{   return   _name;   }
set   {   _name   =   value;   }
}

public   int   StudentCount
{
get{   return   _students.Count;   }
}

public   System.Collections.ArrayList   Students
{
get{   return   _students;   }
}

public   Class(   string   name,   int   age   )
{
_data   =   new   Data();
_students   =   new   System.Collections.ArrayList();
Name   =   name;
}

public   void   Add(   Student   student   )
{
Students.Add(   student   );
}

public   void   Save()
{
for(   int   i=0;i <   Students.Count;   i++   )
{
Student   student   =   (Student)Students[i];
_data.Save(   ID,   Name,   student.ID,   student.Name,   student.Age   );
}
}
}
}

这是第三个类Data,负责对数据库操作
using   System;

namespace   Demo
{
public   class   Data
{
public   Data()
{

}

///   <summary>
///   向数据库写入数据
///   </summary>
public   void   Save(   int   classID,   string   className,   int   studentID,   string   studentName,   int   studentAge   )
{

}
}
}


我是打算这样做应用,主程序只负责人机界面的交互,主程序中的DATAGRID与一个
DataTable绑定,DataTable与一个Class类对应,类Student和Class负责数据逻辑,类Data负责与数据库的读写。
疑惑一:这样做的初衷不想让主程序中与数据库产生关系,但是取DataTable列的时候又要涉及到列名,这样又要用到数据库表的列名,这样就矛盾了。
疑惑二:当界面上DataGrid中每一个单元格的内容改变时,需要马上更新类Student的实例,由这个实例来做一些逻辑判断,这样显得非常麻烦。
疑惑三:一个窗口所占内存中有了一个DataTable和一个Class,那么同样的信息消耗的内存是两倍。
如何解决以上三个问题呢。

------解决方案--------------------
1)维护一个数据