以前也作过不少项目,不过都是两层的,都是在.aspx.cs中直接写sql语句操作数据库。现在跳到了一个新的公司,这个公司都使用三层开发的,也就是说现在要在.aspx.cs中操作数据库需要调用某个类的某个方法,由于没有这方面的经验,请大家介绍一下Web三层开发的设计思路、方法、经验等等。另外我初步觉得三层开发有一些不好之处,例如:在一个页面中有一个listbox,现在要把这个listbox中的所有项保存到数据库中,在两层中,可以先构造一个字符串,然后循环Listbox.Items,拼接这个字符串,最后将这个字符串变量传给SqlCommand更新数据库,例如:string strSql = "";
foreach(ListItem li in myListBox.Items)
{
  strSql += "insert into mytalbe values('"+ li.value +"')";
}
SqlCommand comm = new SqlCommand(strSql,myConnection);
.....可是在三层中,我只能循环listbox的项,然后在每次循环中调用一次中间层的方法,那么也就是说我的Listbox中有多少项就要调用多少次中间层的方法,也就会打开/关闭多少次数据库。这样效率是不是很低呢?
也不知道我的看法对不对,请各位高手多多指教!!!

解决方案 »

  1.   

    简单的说就是把数据库操作放在一个类里而已,建议你用microsoft的sqlhelper,已经做好了的
      

  2.   

    了解一下微软的Duwamish吧,它是n层结构。
      

  3.   

    你所说的那个中间层写得如何了?如楼上的,SqlHelper很不错啊,象你所说的listbox这样的要求,用sqlhelper还是可以允许你构造好sql语句再传进去了。其实个人觉得,情况多变,不一定非要用几层来实现,需要变通的地方就变通了。
      

  4.   

    楼主,转个方法就行了,
    比如像这样数据访问类
    base.cs
      public void ExecSql(string StrSQL){}业务逻辑或方法类
    function.cs
    public void insert(string value)
    {
      string StrSql="insert xxx values "+value+";
    }页面
    page.aspx.csforeach()
    {
     function.insert(listbox[].value);
    }
      

  5.   

    连接字符串我不会写在每个页面的,都是写在web.config里
      

  6.   

    好处多,有体会,上次就有个项目要求把c/s版变成b/s版 ,只要把界面换了换,webservice层 和数据访问层 几乎不做任何修改就可以用了
      

  7.   

    请大家介绍一下Web三层开发的设计思路、方法、经验等等.
      

  8.   

    搂主,你的疑惑我也曾有过,首先你说的三层结构的缺点,要辩证的看,在你举的例子中,没有复杂的业务逻辑,只是简单的insert,当然是二层比三层好,可如果业务复杂,需要进行逻辑判断,还是三层好,因为你可以把业务逻辑处理放在Business层,即所谓的中间层(业务层),而页面层尽量少放业务逻辑,这样当页面更换或者业务逻辑变化时候,页面层与业务层可以独立修改,不会影响到对方。其次,使用Business,可以大量的重用代码,不必一个方法每个页面都写一遍
      

  9.   

    http://www.pdriver.com/pb03/12/EPSpattern.chm
    微软出的<<使用 Microsoft .NET 的企业解决方案模式>>
    上面有微软推荐的三层模式
    第三章专门针对web的
      

  10.   

    不是说加了一个sqlhelper的类,就算是3层结构了。3层结构是加了一层逻辑处理层,而sqlhelper只不过是一个数据库访问类而已,没有什么业务逻辑的。
      

  11.   

    我们开发都是自己写逻辑处理层,然后调用SqlHelper
    要是大的数据量的处理,我喜欢放在存储过程里做处理
      

  12.   

    其实说的是面向对象编程的问题了,可以参考Petshop的例子呀,是一个很好的学习用例
      

  13.   

    根据项目做三层的设计..不要期望做一次两次就可以随处用..类似你提到的方法.可以建立conn.open方法,insert方法,处理Sql方法..用insert拼接后,调用处理Sql处理方法..对于大项目建议采用三层..如果中小项目.没有必要如此..另外如果你的项目中有N多个重复的或者类似的操作方法..可以封套为类..不需要用到三层结构..
      

  14.   

    我的理解是:
    ASPX,ASPX.CS算一层
    Business,Data算业务层,
    数据库算数据层.我最近也正在学习,推荐看ThePhile这个例子,我觉得对我帮助太大了,我正在学习他的结构,虽然还不是太懂,但是先学了以后慢慢理解肯定会有很大的进步.每一个模块建三个类库,比如一个新闻的模块,类库项目分别为:News.Configuration(此类库主要用于从XML文件中取得数据库连接),News.Business(业务层业务处理),News.Data(业务层数据访问类库)这就是我这几天学习的一点心得,理解得还不是很深刻,希望大家多多帮助