日期:2014-05-17  浏览次数:20403 次

三层架构问题 ~~~~~~~~在线等高手
下边的程序为加学生或者老师,有2中写法,但是我不知道改用哪个?


Class 表
ClassID
ClassName班级名称

People表
PeopleID
Flag 标志,1,学生;2,老师
Name 姓名
Sex 性别

V_Student 视图
Name
ClassName
Sex

V_Teacher 视图
Name
ClassName
Sex

第一种写法
C# code


Web层 
addStudent.aspx.cs
protected void btnAdd_Click(object sender, EventArgs e)
    {
        StudentInfo info = new StudentInfo();
        info.Name = txtName.Text;
    ......
        if (StudentBLL.AddStudent(info))
        {
            JScript.AlertAndRedirect("添加成功!", "ManageStudent.aspx");
        }
    }

addTeacher.aspx.cs
protected void btnAdd_Click(object sender, EventArgs e)
    {
        TeacherInfo info = new TeacherInfo();
        info.Name = txtName.Text;
    ......
        if (TeacherBLL.AddTeacher(info))
        {
            JScript.AlertAndRedirect("添加成功!", "ManageTeacher.aspx");
        }
    }

BLL层
(StudentBLL.cs)
        public static bool AddStudent(StudentInfo info)
        {
         if (instance.AddStudent(info))
                return true;
        else
                return false;
        }
(TeacherBLL.cs)
        public static bool AddTeacher(TeacherInfo info)
        {
         if (instance.AddTeacher(info))
                return true;
        else
                return false;
        }
DAL层
(StudentDAL.cs)
        public bool AddStudent(StudentInfo info)
        {
        
            StringBuilder buffer = new StringBuilder();
            buffer.Append("insert into People(Flag,Name,Sex) Values (@Flag,@Name,@Sex)");
            SqlParameter[] parameters = {
                    new SqlParameter("@Flag",SqlDbType.Int,4)...};
            parameters[0].Value = 1;
        ...
            SqlDbHelper db = new SqlDbHelper();
            return db.ExecuteNonQuery(buffer.ToString(), CommandType.Text, parameters) > 0;
        }
(TeacherDAL.cs)
    public bool AddTeacher(TeacherInfo info)
        {
            StringBuilder buffer = new StringBuilder();
            buffer.Append("insert into People(Flag,Name,Sex) Values (@Flag,@Name,@Sex)");
            SqlParameter[] parameters = {
                    new SqlParameter("@Flag",SqlDbType.Int,4)...};
            parameters[0].Value = 2;
        ...
            SqlDbHelper db = new SqlDbHelper();
            return db.ExecuteNonQuery(buffer.ToString(), CommandType.Text, parameters) > 0;
        }
DBUtility层
StudentInfo.cs
...
TeacherInfo.cs
...




第二种写法


------解决方案--------------------
第二个!
------解决方案--------------------
你可以看看代码生成器生生的代码
!!!
------解决方案--------------------
第二种 同样的方法没必要写2个
------解决方案--------------------
5楼的办法不错。。。
------解决方案--------------------
第二种,就跟商店里的食品一样,难道 添加猪肉跟牛肉 要写2个方法。
------解决方案--------------------
楼主这个问题难有标准答案
因为楼主是想对学生和老师对象进行抽象,抽象出People这个基类,
People可以是interface,或者abstract class,也可以是class
但要不要对People做持久化,这个需要根据实际情况来做具体设计。
如果要我来做,会分别建学生表和老师表,而people只会做为一个抽象对象存在,
楼主现在的做法实际上把学生和老师对象在数据库层面上就耦合在一起了,不利于以后这两个对象独立的变化。
------解决方案--------------------
那个简单用哪个
------解决方案--------------------
这两种都挺差劲的。
------解决方案--------------------
动软生成器,有用过么?下个用下就可以看到效果
------解决方案--------------------