我的系统想分为三层结构,在写逻辑层时,看到有的资料介绍是要把它设计成对数据库操作的
不可再分的原子结构。所以我就想把对每张表的添加、删除、筛选、更新等都放在这里用方法实现,可是每张表的结构不同,每次操作的字段也不同,所以想请教各位前辈一下,您们的数据层是如何设计的,希望能给个例子,谢谢!

解决方案 »

  1.   

    3层结构是概念而已。
    它展示的是一个面向对象的编程风格而已。怎么做,你觉得方便就好。每个表的结构不通,但都能统一在表TableName, 字段Field, 查询条件Condition, 排序字段OrderBy,排序类型,这几个对象模型里面。就象每个人都不一样,但都能统一到手脚眼鼻等等里
      

  2.   

    不是,我的意思是说,具体实现的时候,方法该如何写,
    比如我有两张表:user,news,我需不需要为每张表都写四个方法实现添加、删除、筛选、更新,还是写个比较统一的方法然后参数里面加上表名;还有就是当操作字段不同时,等等。希望前辈们,能给出个具体的数据层操作的方法的小例子给看看,写个意思就行,我自己也能写,但是想看看有经验的前辈的写得比较规范、合理的方法。实在感谢!
      

  3.   

    //****数据层
    [Serializable]
    public class TBSystemUser:ObjectExtion
    {
       public TBSystemUsert(){}
       
       public TBSystemUser(SerializationInfo info, StreamingContext context)
       {
            //****序列化处理
            Deserialize(info, context);
       }   public string UserCode
       {
          get{
              if(GetValue("UserCode")!=null && GetValue("UserCode").ToString()!="")
              {return GetValue("UserCode");}
              else{return "";}
           }
         set{
             SetValue("UserCode",value);
         }
       }
    }
    //****数据处理层
    publi class RuleArivateData
    {
       private TBSystemUser mItem;   public RuleArivateData()
       {
          mItem=new TBSystemUser ();
       }
       public TBSystemUser Item
       {get{return mItem;}
        set{mItem=value;}
      public DbParamter SQLdbParamter(DbParamterEnumType EnumType)
      {
          DbParamter dbParamter=new DbParamter();      switch(EnumType)
          {
               case DbParamterEnumType.Insert://新增
                    dbParamter.CommandText="Proc_SystemUser_Insert";
                    dbParmter.CommnadType=CommandType.SortProduct
                    dbParamter.ProcParamter="@UserCode,@UserName";
                    break;      }
          dbParamter.add("UserCode",mItem.userCode,30); 
          dbParamter.add("UserName",mItem.UserName,50);
          return dbParamter;
      }
      }//****数据传输层//****表示层 }
      

  4.   

    比如操作更新数据的方法:
    public bool  updata(string tablename,string ps,string values)
      {
       string str="updata" + tablename + "set (" + ps + ") values (" + values +")";
       SqlDataAdapter da =new SqlDataAdapter(conn);
       da.UpdateCommand.CommandText=str;
       da.UpdateCommand.ExecuteNonQuery();  
       return true;   
      }调用时:
    updata("user","name,psd,role","'lxw','123','admin'")我不知道我这样写和不合理?谢谢前辈们!
      

  5.   

    假设ModelInfo 是对象模型
    BaseClass 是基类
    BLLAdminModelAdd是BLL层的类
    DALAdminModelAdd是DAL层的类流程这样比较漂亮,我认为而已BLLAdminModelAdd类中
    public void Add(ModelInfo model)
    {
    using (TopWin.Common.BaseClass base1 = new TopWin.Common.BaseClass())
    {
    new DALAdminModelAdd ().Add(model, base1);

    CommonClass.MsBox("添加成功", "Admin_Model.aspx");

    }
    }
    DALAdminModelAdd类中
    public void Add(ModelInfo model, BaseClass MyBase)
    {
    MyBase.MyExecuteNonQuery("TopWinBBS_AdminModelEdit",arrParameter);

    WebUIModelInfo info1 = new ModelInfo();
    info1.Name = Model_Name.Text;
    info1.Top = Top.Text;
    info1.Foot = Foot.Text;
    info1.Index = Index.Text;
    info1.Board = Board.Text;
    new BLLAdminModelAdd ().Add(info1);
      

  6.   

    为每个表都生成添加、删除、筛选、更新的方法也可以,但不要手工写,否则会累死你,可以使用一些代码生成工具如:动软.Net代码自动生成器,CodeSmith,等,他们可以为每个表都生成添加、删除、更新等方法,并为每个字段都生成了属性等
      

  7.   

    根据表结构不同写出对应的数据映射类,比如user表为2个字段username,password
    则写成:
    public userData{
       private string m_username;
       public string UserName{
           get{.....}   }
    }
      

  8.   

    然后使用类的反射机制来生成sql语句,和sql参数,如果用存储过程的话可以在头部定一类属性指定这个映射类采用那个存储过程来进行相应操作。
      

  9.   

    根据表结构不同写出对应的数据映射类,比如user表为2个字段username,password
    则写成:
    public userData{
       private string m_username;
       public string UserName{
           get{.....}   }
    }哪不是要有多少表写多少个类?
      

  10.   

    你看一下petshop就知道该怎么做了,其实就是把数据操作集中放在数据库中,逻辑层和表现层都不和数据库直接打交道,这样要改的话直接上数据层改,思路比较清晰,而在数据层中,你可以用一个类来实现直接对数据库的添加,删除等操作,其它类则调用这个类来实现具体的操作,这样就行了的.
      

  11.   

    三层只是为了方便以后的维护,使代码更清晰罢了,不能死套,你看petshop它还没用存储过程呢,难道说它就是个差项目吗?灵活运用就好了.
      

  12.   

    comerliang:我以前自己做了个工具可以自己根据表结构生成实体类,非常爽的,人家做3小时我10分钟搞定了。
    net205(向MVP学习!) :http://blog.csdn.net/huhong81312/archive/2005/07/17/427618.aspx这里有个反射的例子,不过和这个问题中的我说的反射不同,但是总的来说都是大同小意。
      

  13.   

    http://blog.joycode.com/saucer/articles/77807.aspx
      

  14.   

    nayc(骑白马的不一定是王子,他可能是唐僧。) ( ) 信誉:100  2006-07-11 10:48:00  得分: 0  
     
       不是有多少个表就写多少个类,是写实体类
      
     
    ——这位兄弟说得言简意赅,跟我要表达的意思相似,支持。
      

  15.   

    可以使用SQLHELP的吗.把表写成对应的类.四个操作用存储过程.本人目前正在写一保险续期项目.asp.net2.0就是这样来写的.可以私下交流下QQ54154114