查找了一下关于“三层架构”的帖子,了解到三层是:表示层、中间层、数据层,却使我一头雾水。每次创建一个新窗体(比如WebForm1)系统都会生成3个文件:WebForm1.aspx、WebForm1.aspx.cs、WebForm1.aspx.resx我想问的是:我所做的程序都是在aspx.cs下写的C#代码(对数据库的检索,增删改),这些代码都是表示层的吗?如果是的话,那么中间层所实现的功能是什么?它的代码写在哪里?又保存在哪里呢?
另:aspx.resx里面的代码是做什么用的?

解决方案 »

  1.   

    附:我做的程序的部分代码如下(都是aspx.cs文件下的,按扭事件实现记录的增加和修改)
    private void Button2_Click(object sender, System.EventArgs e)
    {                           
             string str_bz="";
    int i;
    string str_n=DropDownList1.SelectedItem.ToString().Trim();
    string str_y=DropDownList2.SelectedItem.ToString().Trim();
    string str_r=DropDownList3.SelectedItem.ToString().Trim();
    string str_riqi=str_n+"-"+str_y+"-"+str_r;
    if(ModifyTime(str_riqi)=="0")
    {
    Label_mess.Text="提示:填写日期输入错误,请更正。";
    return;
    }
    if(bz.Text!="")
    {
    i=sjcd(bz.Text.ToString().Trim(),100);
    if(i==0)
    {
    Label_mess.Text="提示:反馈意见输入字数过长!";
    return;
    }
    if(i==1)
     str_bz=bz.Text.ToString().Trim();
    }
    string sql="select * from bz_table where dwm='"+Lb_dwm.Text.ToString().Trim()+"' and riqi='"+str_riqi+"' and lb='"+Label11.Text.ToString().Trim()+"'";
    Open_conn();
    SqlDataAdapter da1 = new SqlDataAdapter(sql,myConnection);
    DataSet ds1 =new DataSet();
    da1.Fill(ds1,"dwm");
    myConnection.Close();
    if(ds1.Tables["dwm"].Rows.Count==0)
    {
    string str_insert="insert into bz_table(dwm,riqi,bz,lb) values('"+Lb_dwm.Text.ToString().Trim()+"','"+str_riqi+"','"+str_bz+"','"+Label11.Text.ToString().Trim()+"')";
    Open_conn();
    myConnection.Open();
    SqlCommand Com1=new SqlCommand(str_insert,myConnection);
    Com1.ExecuteNonQuery();
    myConnection.Close();
    Page.RegisterStartupScript("", "<script language='javascript'>alert('"+"记录保存成功!"+"');</script>") ; 
    }
    else
    {
    string str_update="update bz_table set bz='"+str_bz+"' where dwm='"+Lb_dwm.Text.ToString().Trim()+"' and riqi='"+str_riqi+"' and lb='"+Label11.Text.ToString().Trim()+"'";
    Open_conn();
    myConnection.Open();
    SqlCommand Com2=new SqlCommand(str_update,myConnection);
    Com2.ExecuteNonQuery();
    myConnection.Close();
    Page.RegisterStartupScript("", "<script language='javascript'>alert('"+"记录修改成功!"+"');</script>") ; 
    }
    DataGrid1.CurrentPageIndex=0;
    BindGrid();
    }
      

  2.   

    .resx是资源文件
    严格来说cs文件不算中间层,简单的中间层可能只封装了一些业务逻辑,业务逻辑类再去调用数据访问层。复杂的可能包含一个企业架构在里面(中间件),那里面的东西就多了,比如事务处理、日志处理、权限处理等等。
      

  3.   

    >>>>这些代码都是表示层的吗?yes>>>>如果是的话,那么中间层所实现的功能是什么?your code is all database-related, no logic, for starters, try to move your database-related code into another project or class>>>另:aspx.resx里面的代码是做什么用的?to include resources, like localization stuffs
      

  4.   

    我觉得所谓中间层就是包含你的业务逻辑,它应该是和界面代码分离的,所以这样的代码一般是编译为单独的类库存在的,你可以看看.net duwamish的实现
      

  5.   

    >> 那么 业务逻辑层(中间层)代码写在哪里?一般你要独立建立一个类库工程,把业务逻辑封装为类放在那个类库中。数据访问层也是这样的,可以用DAO模式,数据访问对象模式(这一层可以使用代码生成工具来生成,例如 CodeSmith 等等)。表现层尽量不要绕过中间层直接调用数据访问层的代码,更不要直接访问数据库。这样分层开发的好处是,把复杂问题简单化了,便于开发、扩展、系统伸缩和灵活性,这与网络的 OSI 7层模型有相似的道理!
      

  6.   

    我说说我的理解吧,我也不知道是否的正确的。
    比如一个查询
    中间层应该就是 组织查询的sql语句 将sql语句传给数据层,然后数据层再返回一个结果集给中间层比如dataset
      

  7.   

    明白了一些,比如要实现我那段代码,意思是不是应该这样做:
    (表现层中)按扭事件仅仅传一些值(比如要增加的值)给中间层,然后中间层判断应该执行什么操作(增加还是修改),然后再将该操作的一个<值?>传给数据访问层,如果是增加,数据访问层再执行INSERT操作?如果是这样子,能不能给我一个简单的小程序代码(包括三层分别的代码),只要实现数据的录入就行(哪怕数据库里只有一个字段)。当然有这样的链接也行,谢谢!
      

  8.   

    表示层就是明了显示的。中间曾是相对用户来说是封闭的,而数据层我理解是数据存取的容器不知道对不这样理解,我想表示曾只有页面。aspx。而传输过程是连接中间层的。既进行数据的逻辑处理。而数据层就是最终的数据库等数据信息吧。就和那位老哥比喻的银行取款是的
      

  9.   

    请大家看看 我在2005-3-9 23:09:05 回帖的那个说法正确吗?
    同时谢谢各位的回答,使我长了不少见识(以前一直以为.NET就是那样做法)
    明天给分:)晚安!http://www.microsoft.com/china/community/program/originalarticles/TechDoc/duwamish.mspx
      

  10.   

    我也正在学习三层,不过duwamish关联太多,看的很累
    我在看我朋友的代码,也是三层的,关联没有duwamish多,先看懂他的,然后再看duwamish。
    表现层就是输入和输出的作用
    数据层就是操作数据库的
    业务逻辑层就说不好了,这个是难点