今天跟慕白兄谈论了关于三层的看法。。其实本人刚接触三层,应该说接触不到二天。。在网上看到许许多多的人认为三层怎么样怎么样,其实这都是在对还没有理解三层的人一个误导。。
其实三层很简单。。
平常ASPX和ASPX.CS文件就是表示层。。
而我们建的类App_Code里面就是数据层(DAL)可能包括“(BLL)像处理字符串这种就是BLL了”..昨天在网上看了一些资料,真的很一头雾水..今天下载了一个实例在51aspx下载三层的实例,看了之后就明白了...推荐不明白三层的人去下载看一下,一个个人小站三层的。。功能其实很简单,但代码实现却很复杂。。他是将Model(实体,像一会员吧,有注册时间,用户名,密码等等)作为一个项目,IDAL(数据接口Interface做为一个项目),BLL(业务作为一个项目),DAL(又作为一个项目),这样的分法确实是个人理解“真正”意义上的三层,但是简简单单的一个功能有必要这么复杂化吗?在我们中国这个国家,有多少项目需要用到这样的分层呢??大家可能平常都只是一个人写项目,或者多几个,但是你们有用这种写法吗?
我想大家应该都是混在一起写了。。都只有一个项目吧。。这就说明了,三层是好,但是却不一定实用,不一定能在我们的项目中用起来。看过PetShop的人应该知道,PetShop功能强大么???一般般。。但是仔细一看他的代码。。6,7个项目,,这是在增加效率还是加大工作量?固然有些人会说,维护方便扩展方便之类的,但是一个小项目(除大项目)会扩展到哪种地步??除非你的数据库和框架一开始设计的不合理,当然我们不用三层用普通的混合模式的话也需要合理的设计好整个框架和数据库。。当然如果项目可能以后会移植数据的话,最好将BLL和DAL分开。。总的来说,大家可以学习三层的思路,但却不一定要跟着它走,因为它并不一定适合自己,选一个适合自己的路走是很重要的,就好像中国是个发展中国家,如果要走美国走的路线,那岂不是。发这个贴子希望对不了解三层的人一点帮助。以上只是我个人的看法~~当然大家有什么其它看法都可以提出来。。平常我们调用容器后普遍的都是调完关闭,这里提供大家一个小技巧(刚从慕白学的)
mycmd.ExecuteReader(CommandBehavior.CloseConnection);这样一个参数。呵呵另外对用ASP.NET 2.0的人一个发布的小技巧,我们平常发布网站每次发布DLL的名字都会变。这时候可以用到WebDeployment安装一下就可以跟VS2003一样了
http://www.cnblogs.com/chy710/archive/2006/10/26/540959.html这里是使用教程

解决方案 »

  1.   

    看上去你不应该使用.netframework,因为整个.net framework是至少好几个(实际上是好几十个)项目才可能完成的。这个说法对吗?显然,你又会有另外一方解释。我看不出你的道理道理有多理性,似乎只是一时冲动的一种随便议论。
      

  2.   

    三层就是等于三个或者6、7个项目,你的理论太简单了但是一个小小的网站,你却要把它拆开来6,7个项目来做,,你认为这样做合理么?我相信Petshop只是让大家去知道,去学习什么是三层一个概念。。并不是让大家盲目的去追寻三层。
      

  3.   

    不好意思,说得有些冲动,刚才重新看了一遍lz的大论,里面大部分还是符合我对三层的看法,确实是有很多项目很多根本没有什么逻辑的项目硬是要用三层,结果所谓的BLL只是一个空架子,没有任何意义,每个方法下面都只有一句return...而有的项目又划分得比较混乱,其实对于分层来说,最不好处理的是逻辑层的划分,很多人将某些逻辑不小心划入数据层,或者是表示层,这个把握不是一下两下能够拿捏的......
      

  4.   

    //但是仔细一看他的代码。。6,7个项目,,这是在增加效率还是加大工作量?
    我记得petsho4好像是20几个项目
    创建的时候加大工作量会减小维护与扩展的工作量
    一个项目也可以逻辑上分开的,不同的方法,不同的类,不同的文件夹
    都可以,很灵活的
    而把所有代码写在一起高度耦合的代码,就像一次性筷子,用起来方便快捷
    但用完之后就得当垃圾扔掉,下次你得换一双新的!
    但你在家里吃饭会用一次性筷子吗?
      

  5.   

    viena(维也纳N02) 幽默,赞一个~~
      

  6.   

    刚来,说两句吧1、楼主的表达可能不够完善。
      
       "而我们建的类App_Code里面就是数据层(DAL)可能包括“(BLL)像处理字符串这种就是BLL了”
       
       这样讲肯定会有问题的。区分层的关键是实现的功能,而并不是任何其他外在的表现形式,
    昨天我是举个例子。为了证明,三层或n层并不一定就是多个项目组成。
    同一个项目也可以分多层。关键是各自实现的功能分开,当然代码最好按层放在不同的区域,便于维护。当然“(BLL)像处理字符串这种就是BLL了" lz这样的说法容易让人造成误解。
    字符串处理是每一个层都会用到的。这是程序实现必要功能的基本操作。就我昨天与楼主的对话来看,他应该是理解了多层架构的,可能表达上有些偏激且不够严谨。
    2、关于三层或n层的选择问题,不同的人会有不同的看法。
       
       以我个人的经验来说,产品开发或大型项目,最好用多层开发,
       小的项目则可以灵活运用。
      

  7.   

    看来楼主队分层还是没有理解透彻啊,我向大家都应该问问自己:为什么要分三层,或者为什么要分层?
    楼主说:一个小小的网站,就有6,7个项目。petshop也不复杂...
    其实说得没有什么错误,从项目的经济情况讲,我们却是没有必要把一个简单的功能做得如此复杂。但是看问题不能光从一个角度看,petshop就是为了展示分层以及其他的一些结构概念而作的,如果包含了很复杂的功能,反而会把人搞蒙。为什么要分层?
    1。从软件架构的观点来看,分层可以decouple对象的相关性,使得每个对象保持简单,而且有利于重用。就像前面几个人说的,可以替换之中的一层而不必修改其它层,这就是分层的灵活性。
    2。从软件工程的角度来看,将系统分为逻辑上独立的层(或模块),可以加快开发速度。为什么呢?如果把系统分成7个项目,每个项目一个人做,则可以并行工作。反之如果只有一个项目,很难将工作拆分开来。
    3。从质量保证角度来看,将系统分层(或模块)有利于做测试。模块分的越小就越容易做单元测试,通过分层,将逻辑分开,可以更方便的做测试,也可以很快得找到测试失败的原因。
    4。从维护的角度来看,如果以后系统需要升级或修改bug,升级人员一般不可能是最初的开发人员,分层可以使系统更加容易理解,同时也易于修改。当然,分层也不可避免的带来诸如提高了程序的复杂性,提高了代码量等问题。
    在实际项目中,分不分层不仅要考虑软件的用途,扩展性,规模,也要考虑成本和可执行性。
      

  8.   

    整个系统—>子系统,软件包-》类设计(对外)-》内部算法设计(一般指private方面)
    我们一般指的分层指的是软件包层的划分
    一般分
    表现层, 业务层,数据层,系统层(与系统软件挂勾,方便平台移植)
    层不层之间与通过一定的方式去沟通,这个方式是有一定规则的,如上层只能调用下层的东西。层与层之间的沟通简单,越简一,依赖性越小赵好,这就如同个连接的管子。总体上而,这是一种分治法,一次只做一部分事情,从整理到局部自上而上的构建系统,
    如果整个系统不是很繁杂,也可以省掉子系统这一步,从
    整个系统-》类设计(对外)。
      

  9.   

    对于petshop中abstrator factory, 其实就是数据层与业务层之间的沟通的方式,并且让这种沟通简单化,在多个对象组中选择一个对象实例化,而让上一层业务层调用简单化,
    petshop中多数据库。。
      

  10.   

    你改改没分层的代码,不管是BS,还是CS,一定叫你晕~~~~
      

  11.   

    jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程) ( ) 信誉:100    Blog  2007-04-03 16:42:05  得分: 0  
     
     
       你该改我的代码,保证让你先晕后乐。先晕:没见过我这么写代码的;
    后乐:改起来也太方便了。
      
     
    ====================================
    求教,看看大虾怎么写的。
      

  12.   

    jyk.cnblogs.com 
    这里面会陆续写我的方法。