从网上下了几个三层的源码看了看,这哪是三层,一个解决最多方案里有做多7个项目,难道有7层?
后来仔细看了一下,原来用到了反射和抽象工厂所以多了一层(DALFactory),还有一些类和接口(model,IDAL)是多于两层都用到的,所以把它们写到了单独的项目里。这样感觉六个项目就够了(UI,BLL,DALFactory,DAL,Model,IDAL)。疑惑1、为什么BLL里都没有什么东西,基本上都是几行代码,什么东西应该放在BLL里,BLL的意义何在?疑惑2、DAL里也有一些带有“user""login"等字眼的类,这些类基本都是一些对跟类同名表的增删查改的操作,这是不是业务逻?。如果把这些写在了DAL里是不是会不太方便呢?例如:如果又要做另一个项目(做另一个应用程序),把上一个项目的DAL拿过来用,却发现这个项目和原来的项目数据库里的表是不一样的,所以DAL还要做较大改动才能用。望高手解惑!

解决方案 »

  1.   

    http://baike.baidu.com/view/687468
    需要深入理解
      

  2.   

    Models:实体类   里面的类和数据表对应,
    DAL:数据访问层  数据表名+DAL,是对此表增删改查的封装
    BLL:业务逻辑层  数据表名+BLL,是对业务逻辑的封装,比如登陆,UserDAL里面应该有个getUserByName(string name)获取一个对象,在UserBLL里面通过User u = UserDAL.getUserByName(前台的登录名);
    if(u.PassWrod==前台的密码)判断是否登陆成功,
    个人理解,仅供参考,高手莫拍,
      

  3.   

    那前台需要Models这个项目么?
      

  4.   

    都是根据需要来的,至于多少‘层’无所谓,还可以分个二十多‘层’呢
    BLL  ,业务逻辑层 ,不只业务逻辑的封装,还有验证啊,等等
      

  5.   

    需要
    前台需要添加 BLL  和  Models 项目的引用Models这个项目几乎每层都会用到
      

  6.   

    BLL业务逻辑层    主要是对商业逻辑处理
    DAL数据访问层   是要根据不同的表来定义处理
      

  7.   

    BLL放逻辑处理函数。我以前做的一个就是。
      

  8.   

    不是多少个项目就代表多少层三层是指UI(表现层),BLL(业务逻辑层),DAL(数据访问层)你看到的是工厂三成,包含反射和缓存机制的。
    DALFactory  这个是数据工厂,使用反射来创建DAL层对象的。
    IDAL  声明DAL层向外部暴露的接口,它也是反射机制的重要组成。Model 只是声明数据结构
      

  9.   

    BLL层是业务逻辑层,是调用函数使用的,所以不需要太多的东西,基本上都是函数的调用.
    而DAL层是数据连接层,包括调用数据库中的存储过程,传参,以及函数的编写.
      

  10.   

    不想在dal出现一点业务逻辑,就要用orm...
      

  11.   

    昨天刚下了个petshop好复杂,研究中。
    这个帖子过几天再结,互相学习啊!
      

  12.   

    数据库都不同  DAL也不同 当然不能复用
      

  13.   

    还好我理解了,现在看几层都比较OK(自认为的,哈哈)疑惑1、为什么BLL里都没有什么东西,基本上都是几行代码,什么东西应该放在BLL里,BLL的意义何在?
    那要看你的业务复不复杂了,如果你添加用户,不光是往用户表插入数据,还要往日志表插入操作,还要往权限表插入数据,那你的BLL里面就不简单疑惑2、DAL里也有一些带有“user""login"等字眼的类,这些类基本都是一些对跟类同名表的增删查改的操作,这是不是业务逻?。DAL里面都是数据库操作如果把这些写在了DAL里是不是会不太方便呢?例如:如果又要做另一个项目(做另一个应用程序),把上一个项目的DAL拿过来用,却发现这个项目和原来的项目数据库里的表是不一样的,所以DAL还要做较大改动才能用。这是肯定的,就像网上没有稳定的DAL提供下载一样,都是根据数据库的表字段来的
      

  14.   

    MVC思想.Model
    view
    control
      

  15.   

    这是摘自 http://baike.baidu.com/view/687468的一段三层结构的程序不是说把项目分成DAL, BLL, WebUI三个模块就叫三层了, 下面几个问题在你的项目里面:   1. UILayer里面只有少量(或者没有)的SQL语句或者存储过程调用, 并且这些语句保证不会修改数据?
       2. 如果把UILayer拿掉, 你的项目还能在Interface/API的层次上提供所有功能吗?   
        3. 你的DAL可以移植到其他类似环境的项目吗?   
        4. 三个模块, 可以分别运行于不同的服务器吗? 
    如果不是所有答案都为YES, 那么你的项目还不能算是严格意义上的三层程序
      

  16.   

    解一:三层是分了更好的进行代码分工。如果只是一个很小的程序,直接一个项目里,甚至一个窗体里就全部搞定了。有三层的目的是为了可以使代码的辨识度增加。BLL中放一些业务逻辑方面的东西,比如从DAL中传入了int类型的,处理一下给表示层返回Bool的。
      

  17.   

    又是一个以为一个project就是一个tier的...那我岂不是设计过几十层的东西?以你现在的程度最好去学OOAD和软件工程,分层不是技术问题而是工程问题...
      

  18.   

    1.每个公司的分层都不一样,具体分几层还是看需求和项目的大小决定.
    2.BLL业务逻辑层,主要是处理逻辑判断方面的,楼主看到的那个项目都是操作数据库的添删改查,所以基本上没有什么逻辑,这一层只是为了以后方便扩展,如果楼主去研究socket时,你就会知道那个逻辑不是一般的多...
    3.DAL数据访问层,所谓的数据访问层就是对数据库语句的操作,所以楼主看到的都是一些表名之类的字段.其中DAL层中有个通用类DBHelper,即数据访问类,这个类主要负责接收每个表对应的DAL类传过来的SQL语句,然后利用ADO.Net的几个对象对数据库进行添删改查.
    4.至于楼主的这句话:(例如:如果又要做另一个项目(做另一个应用程序),把上一个项目的DAL拿过来用,却发现这个项目和原来的项目数据库里的表是不一样的,所以DAL还要做较大改动才能用).这个完全不用担心,应为上面我提到过一个DBHelper通用类,只要你的数据库不更换(如MySql换SQLServer或者Oracle)拿到哪里都可以使用,我们只要把每个更换的表对应的DAL类表名和字段名修改一下就可以了.
      

  19.   

    更换数据库(如MySql换SQLServer或者Oracle)也可以用的helper
    http://blog.csdn.net/kmy001/archive/2010/10/14/5940480.aspx