举我项目中的一个应用为例:UIL:
    负责和用户交互的流程和窗口的控制,在这一层中要执行一些宏观的Insert,Update,Delete操作,这些操作通过调用BLL层的Insert,Update,Delete方法完成;
BLL:
    以Insert为例,因为这里的插入操作并非对单表(假设A)Insert,还要对外键相关联的表(假设B,C)进行Insert,因此在BLL的Insert方法中,依次调用了DAL层中的A.Insert,B.Insert,C.Insert,相当于把对用户而言宏观的操作分解开来;
DAL:
    将每个表(A,B,C)的Insert,Update,Delete操作单独写成方法,即每个表用一个实体类代表,每个实体类下面包含对于该表的Insert,Update,Delete方法。这样设计合理不?

解决方案 »

  1.   

    这几个看名字就应该清楚他们做什么的。。DAL:数据访问层,和数据库进行交互,得到数据
    BLL:业务逻辑层,根据需求,进行业务逻辑的处理
      

  2.   

    DAL与具体的数据库操作分开
    业务层中不用connection.
    在dal中声明一个属性来包装DbTransaction,
    bll中得到.用事务的方法传同一个DbTransaction
      

  3.   

    老大...DAL与具体的数据库操作分开,那数据库操作应该写哪?
      

  4.   

    因此在BLL的Insert方法中,依次调用了DAL层中的A.Insert,B.Insert,C.Insert,相当于把对用户而言宏观的操作分解开来....  那些不适业务层的问题。简单说:
        UIL:关心用户体验,把点了那个按钮、写了什么文字推给业务。
        BLL:关心功能,这些操作都是想作什么,用到哪些接口对谁进行访问。
        DAL:关心数据的管理,给什么数据,数据存哪怎么存。
      

  5.   


    如梦的意思是具体的数据库操作就是SQLHelper  也就是petshop中的DBUtility那一层
      

  6.   

    那不就是四层了.....没看过petshop
      

  7.   

    应该把主外键的操作也写在DAL里  BLL只调用DAL的方法 UIL调用BLL的方法 DAL调用模型层