我很爱国!今天给大家解释一下我对三层结构的理解,也希望能为初学者提供一些参考。大家的疑问:
三层结构是什么?
我们该不该推荐三层结构?
PETSHOP是不是三层结构? 
该不该学习PETSHOP?上一次在CSDN和CNBLOGS上面初步发表了我对三层的理解受到了一些的反驳我的观点:
B/S是经典的三层结构。回复中的观点:
1) B/S是经典的三层结构是错误的。
2) PETSHOP是三层结构,三层包括UI、BLL、DAL。
3) 三层模式是体系结构模式,MVC是设计模式 
三层模式又可归于部署模式,MVC可归于表示模式 
MVC 是一种实现三层架构的比较清晰的实现 
4) 三层模式是体系结构模式,MVC是设计模式 首先我地提出几个问题让大家思考:
1) 三层结构是怎么一个背景下发展的?三层结构到底解决了什么问题?
2) 如果PETSHOP是三层结构那在JAVA领域里什么样才叫三层?难道就没有? 其次引用书上的观点:
引:《实用软件工程》赵池龙 ISBN 7-5053-8546-1 
(P115页)B/A/S三层结构是由C/S二层结构发展而来的,C/S二层结构是由H/T(主机/终端)一层结构发展而来的。……三层结构是三级处理,处理工作由表示层、应用逻辑层和数据层分布式分担。
(P116页)由于客户机/服务器体系结构的广泛使用,使得应用系统越来越复杂化,有些问题在二层结构中不好解决,如服务器负担过重、客户机异地操作不易、不便于在互联网上输入输出信息。为了解决这些问题,并保留一层结构集中处理和二层结构分布处理的优点,与之相应的三层结构方案(Three-tiered)诞生了。
(P116页)三层结构的设计特点是:在数据库服务层上,设计应用软件的数据库的表、索存储过程、触发器、视图。在应用逻辑层上,设计应用软件的事务处理功能模块、数据传输与通信功能模块,这是不可见的构件设计。在表示层上,设计应用软件的登录、浏览、录入修改界面,这是可见的构件设计。
(P116页)三层结构方案:表示层(游览层)、应用逻辑层(功能层)和数据库服务器层(数据层)构成的应用模型。
(P117页)三层结构逻辑关系示意图
引:《程序员考试考点分析与真题详解》飞思 ISBN 7-121-00762-2
(P380页)B/S结构是最经典的三层结构,它包括游览器(Browser)、Web服务器、数据库服务器三个部分。
(P381页)三层的C/S结构是在原二层C/S模式的基础上,加入应用服务器,使其成为三层的C/S计算模式。 再来看看PETSHOP系统架构设计带来的优点:
Martin Fowler在《Patterns of Enterprise Application Architecture》一书中给出了答案:
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。其实从我的角度来看PETSHOP规范所带来的是一套解决软件危机的方案(标准的软件工程开发过程)。而不是专注解决于二层结构所带来的系统性能瓶颈问题。软件危机的主要表现:
1) 软件开发生产率提高的速度,远远跟不上计算机迅速普及的趋势,软件需求的增长得不到满足,……
2) 软件成本在计算机系统总成本中所占的比例逐年上升。
3) 不能正确估计软件开发产品的成本和进度,使得实际开发成本高出预算很多,而超出预期的开发时间要求。
4) 软件开发人员和用户之间的信息交流往往不充分。
5) 软件产品的质量不易保证
6) 软件产品往往不可维护。
7) 软件产品重用性差,同样的软件多次重复开发。
8) 软件通常没有适当文档资料PETSHOP是值得学习的!因为解决的是软件工程的问题,我们学习的、工作的就是软件工程。 最后总结:
从解决问题的角度来看B/S是经典三层结构,PETSHOP不是真正的三层结构,但它是大家口中说的“三层结构”,而且是值得学习的! 补充:
1) B/S原来不是这样取名的,是国内某大型公司给起的名字,在国内延用至今。
2) B/S是三层C/S的一个特例,由于B/S结构是最常见的三层结构,也使其催生了三层结构的出现与发展,因此很多人误以为三层结构就是B/S结构,其实这种理解不正确的。
3) 当然三层结构个人以为带来最明显的一个优点就是可分布式而且是比较容易的,所以可以在多个物理点上部署,但我觉得不因为这样的优点把它叫成“部署模式”了。
4) B/S是一个经典的三层结构,而我们做WEBFORM开发就是在此平台中做“二次开发”,但我喜欢。
5) 由于本人表达能力差,今天先到此。

解决方案 »

  1.   

    对大部分程序初学者来说,软件工程方法学中的分层结构难以理解,反倒是程序设计方法学中的MVC模式更容易懂...原因是学习软件工程方法学需要对客观世界有足够了解,因为这个领域“人”的因素、“人”的影响是主要内容,对初入社会的新人没有经过历练是很难理解的...至于.NET PetShop,它的分层结构体现了软件工程方法学的应用,它的MVC模式体现了程序设计方法学的应用...所以说.NET PetShop是个很好的Sample...但是.NET PetShop仅仅是个Sample,为了Sample它能复杂就有多复杂...对有足够经验的.NET程序员或有丰富工程经验和编码经验的.NET初学者来说它是个非常好的Sample,它会让他们迅速全面地了解.NET体系诸多知识...但对缺乏基础的编程初学者来说它绝对不是个入门的好Sample,.NET PetShop只会让他们陷入大堆难以理解的术语中而晕头转向,更会被一些夸夸其谈的前辈高人们误导入大堆更难理解的概念泥沼中不能自拔...
      

  2.   


    v老师又来捧场了,文章中说明了我的看法,PETSHOP更多体现的是软件工程的问题,而不是解决两层结构中不足和问题。所以也跟你说的误导了一大堆的读者。三层结构为什么而来?为的就是解决两层结构中的问题。文章最的我也提到PETSHOP值得学习的。
      

  3.   

    http://www.cnblogs.com/ATGO/archive/2009/12/22/1629423.html
      

  4.   

    楼主结帖吧,你这多是误导初学者的言论...记住.NET PetShop仅仅是个Sample,没必要把它拔高到那么深刻...
      

  5.   

    要理解/了解三层结构的本质就要从它的发展来认识。而不是人云亦云。
    三层结构的设计是为了解决两层结构带来的问题,而MVC所解决的是软件工程(软件危机)的问题,两者是不一样的。PETSHOP示例是给大家展示”如何“处理软件危机的,而不是处理两层结构带来的问题的!!!所以不是真正的三层结构。
    v老师我不是误导是引导,很感谢你的发表,但你的发表看不出实质的问题实质的东西。
      

  6.   


    v老师我发现一下对你的看法,但不要生气。我觉得你的发言很不负责任。交流平台不只是为了“分数”,不只是为了流量的。摆明自己的观点与大家一起交流才是这个交流平台所起的重要作用。如果你真的要发表意见希望你能把“.NET PetShop仅仅是个Sample”这个观点再详细描述一下,让广大初步者受益。我希望大家能反驳,而不仅仅只是说我误导大家,又说不出原由。这是很危险的。
      

  7.   

    还真是误导啊。说明白点:你为啥不明白3层,那是因为你不明白OOA/D明白OOA/D的人都是不会去讨论3不3层的。UML 也好,pd的ER图也好,都是那里来的OOA/D出来的那么 UMl,ER图出的对象关系放哪里了??自然放在中间了,这算一层吧!数据存储过程这算一层把!界面处理这也算一层把??你OOA/D出来的东西这不是很自然得就分层了吗??
      

  8.   

    uml里的三种类,边界类、实体类、控制类,就是自然而然的分层
      

  9.   

    在cnblogs里面的讨比较实际些,
    我引用一下RedSoft在cnblogs里面的话:
    --------------------------------引用--------------------------------------
    从三层和MVC形成来看,两者没有任何的关系,如博主写的三层的形成背景一样,而MVC是人们归纳总结出的一种设计模式。一个是体系结构,一个是设计模式。三层解决的问题是:将软件项目任务分配到三个不同的处理层,并且各司其职,体系结构非常清晰。MVC解决的问题是:视图和控制分离,降低耦合(根本没有涉及数据),并且在多数人认同这种模式的时候,降低了维护成本。MVC往往运用到三层当中,所以让人有些误解他们的关系。如你使用的asp.net mvc、struts都是mvc模式的现实,而他们可以运用到各自的三层架构当中。
    -------------------------------------------------------------------------我再补充一点的是,设计模式的提升解决的更多是软件危机的问题。
      

  10.   

    再引用一个PETSHOP存在的意义:-------------------------------------引用--------------------------------------------
    henry:你用了它后感觉很不爽,很难维护那用它意义又何在呢?模式没有真不真正,只有使用技巧,如何的合理使用它.对于PETSHOP学习一下,了解一下别人为什么这样做是有好处的,但实际情况是不是真的有必要完全这样干就不一定的.没有最好的方法,只是适合的方法.
    -------------------------------------------------------------------------------------你这个观点很好,其实要说的是在实际开发中按开发团队的规模来实行解决软件工程(软件危机)的问题。小作坊使用PETSHOP可能觉得麻烦,一个人开发一个人修改需求随变随改很方便,但小作坊模式到比较大规模团队中使用的话就变得难以进行了,比如代码不可维护(别人是维护不了你的代码的或者难以维护的很多BUG不敢动的)、代码不能复用(复制贴粘现在很流行了)、成本不断的提高……等。
      

  11.   

    lz总结的都是不同问题域的东西。我们说的是软件工程,而不是系统工程,如果说系统工程,你那个不是还要加上 物理传输的7层协议。软件工程就只和软件工程相关,与其他的东西无关。按lz观念,赵本山们是3层的鼻祖:“把冰箱门打开,把大象塞进去,把冰箱门关上”(多完美的3层啊)
      

  12.   


    1)我说的哪个观点不是软件工程的?
    2)我觉得三层结构应该是从两层结构发展过来的,三层结构提出来的必然性是它解决了两层结构存在的问题。或者再说一个比方,两层结构和三层结构中都可以使用MVC。
      

  13.   

    还不把明白啊,都是不同问题域了按你说的问题分解,那么最传统的过程代码就不是3层了??过程: 输入条件-----处理过程----输出条件     这个是不是3层!我们说了,别生搬硬套,你正真试试看用OOA/D的方式做一个系统看看(别考虑3层,只考虑OOA/D),做完然后看你的系统是多少层?
      

  14.   

    贴出我在一个概要设计开头所写的:1.4.2. 基于面向对象分析和基于结构化服务本文档在分析和设计时很大程度上以面向对象开发思路来展开,而非完全依据结构化开发思路,因此在文中较多地可以看到“对象、抽象、属性、对象接口、扩展、分层、协议”等等概念,而(虽然也使用到但)较少看到 “功能分解、数据库表、数据库字段、模块接口、硬件接口”等概念。但是在描述远程服务机制时,本文档则是立足于结构化接口风格而非面向对象风格。原因是现在各种流行服务框架和机制往往都不支持在同一对象的多个操作之间维系服务器端状态,在服务器端维系过多的状态将严重降低效率,通讯接口设计协议都不选择支持对象状态框架。文档中会做出面向对象设计与底层实现之间进行结构映射方法的相关说明。1.4.3. 对UI/UE设计做事务层面的支持本文档在分析系统业务逻辑设计时,针对服务端事务操作功能进行描述,并不详细描述各种客户端、控制台系统的完整表现层功能,也不包括界面(美工)细节,同时也不描述表现层与事务模型的数值绑定规则和行为映射规则。如果要详细全面地了解交互操作设计规范,特别是根据UI或者(原则性的)UE设计进行系统集成测试时,应该阅读各客户端子系统的UE设计说明书、详细设计说明书。各种客户端的详细设计应该在充分理解和很好地与系统服务端通讯API交互的前提下,去创新不断进化的用户体验、吸引不同层次的用户,而这并不是本文档要涉及的内容。前台的精彩创意只在对用户有明确意义和严格条件的特定时刻才出现,这些场景中对后台的事务操作往往都需要响应速度快、不会因为前台设计的自由发挥而轻易破坏业务规范。同时前台也是千变万化的,在不断修改前台程序时应该尽可能让交互界面设计师来开发(而不是编程人员来开发)。把信息操作看作“增删改查”的传统两层视图设计方法,由于不断破坏系统服务协议的事务性封装,从而混淆了设计权限范围,或许软件凭借核心技术可以进入一个行业但是难以凭借设计技术而占领足够的市场份额。本系统完全不支持这种两层视图。1.4.4. 基于服务而非数据库来完成网络架构本系统是以面向业务服务架构(SOA)为基础,而不是面向关系数据库“客户机-服务器”结构。后者在开发客户端小软件时把远程数据库服务器功能映射为本地数据操作,靠数据库系统自身的低层次的通讯协议来完成网络数据处理功能。面向服务的架构把业务服务功能映射到客户端,基于高负载和隐藏后台系统的特点进行设计,方便拥有多种不同客户端平台的应用接入方式,方便自定义通讯安全机制,服务器端拥有灵活的体系,前台着重于小程序表现和系统集成,后台则着重于全网(LAN、WAN、GPRS、3G)业务支撑,在后台框架内的DAL层(数据存储层)可以将内存中的业务模型对象自动映射到各种各样的数据存储机制上。前后台的分工保证了系统更安全、接入更灵活、并行负载能力更强、系统升级更可靠、全网业务逻辑协调一致、用户体验更专业、支持国际化等特点。
    面向服务进行设计的目的是理顺大型系统的设计主次关系,避免将系统前台最突出的创意与后台最底层的数据库牵强地纠缠在一起而带来的架构风险。
      

  15.   


    1)我的分层角度是从解决系统问题,而不是解决软件工程问题来分层。
    2)我觉得我们的沟通交流还存在一些问题,呵呵。三层结构是为了解决两层结构带来的问题的,
    首先看两层中带来的部分问题如:
    在两层C/S中,随着新的应用在服务器上成倍地增加,连接到服务器上的客户端也日益增多,服务器很快就进入超负荷运行状态,成了一个瓶颈。三层或N层的计算模式就是为了解决这一问题应运而生的。PETSHOP解决了什么问题?最能体现的就是解决软件危机的问题,就像你说的不同域的问题,那就更向大家要解释清了。PETSHOP是解决了两层结构中出现的问题而应运而生的吗?这当然不是的。
      

  16.   

    基本上现在看到的小软件公司的asp.net程序也完全是两层的。不是因为应用程序分为B和S两部分就是两层,实际上只是html表现层这一层,只是html部署在两个地方并且丢来丢去地。
      

  17.   

    sp1234应该是.NET区里的老前辈了,首先感谢你的发表。简单看了一下你的表发,还没学到什么东西。但我想提出我对你发表中提到的一些概念的看法
    1)SOA(Service-Oriented Architecture)即面向服务的体系结构,简单的把面向服务的体系结构解释成面向业务服务架构(SOA),这种看法可能狭窄了一些。如果非得要这么形容,我觉得“面向数据服务架构”会不会更好些呢?
    2)你提到的“客户机-服务器”结构,把远程数据库服务器功能映射为本地数据操作,靠数据库系统自身的低层次的通讯协议来完成网络数据处理功能。可能就是我所说的两层C/S结构。
      

  18.   

    两层C/S!!
    3层B/S!!亏的你能这么说,我想问一句,腾讯的QQ是不是C/S,请问腾讯的QQ有几层?把你这附图,换几个东西。QQ客户端--QQ通讯服务器--QQ数据库,他就不行了,就走不通了??
      

  19.   

    同时,你用了“三层C/S”这个说法。大多数小公司写的C/S程序也是两层的,而不是三层的。不要把C/S跟三层搞混,C/S往往是指一些现成的底层api给你提供了“客户端-服务器”的功能,而三层是指整个软件体系设计时的架构。
      

  20.   

    所以,说C/S是比较过时了一些。有基于底层api的C/S,也还有将业务逻辑层封装为通讯协议的C/S,这是不同的。C/S的不同实现如果不细分,其实搞乱了架构分层。
      

  21.   

    sp1234,我觉得我的看法跟你的看法是不一样的。
    比较过时的是两层C/S。
    还是引用RedSoft的话:
    三层解决的问题是:将软件项目任务分配到三个不同的处理层,并且各司其职,体系结构非常清晰。B/S本身就是三层的C/S平台,WEB应用就是在该三层C/S平台上做二次开发。这是我的愚见。
    而且PETSHOP是在设计过程中为了解决软件危机所应运而生的在设计时分为“三层”,而非三层结构的本质。
      

  22.   

    我们来看看B/S里面各部分都实现了什么,1)浏览器也就是客户端,它主要负责的就是展示UI,至于业务逻辑是一点都不关心的。
    2)对于wanghui0380提到的那个图,理解可能根据不同人不同理解,我会把基于TCP的HTTP协议看作是数据传输层。
    3)WEB服务器与数据库看成是业务逻辑层。
      

  23.   

    一看LZ的帖子就知道它已经走入了自己设置的怪圈
    【它自己也矛盾起来,不断的列举XX的作品,大谈N多名词概念,以填充自己内心的空虚和恐惧】
    -------------------
    BS也好,CS也罢,和分层设计并没有本质联系。一个人脑袋里装的东西,也同时决定了它的产物。
      

  24.   

    如果我是对的希望与大家交流,如果我错了希望大家耐心教导。我做WINFORM也做WEBFORM,这是有感而发。
    如果我错了希望用你的高尚品德来耐心教我,而不是指责、讥骂,虽然我不介意你这么做。
      

  25.   

    如果说C/S、三层C/S,就不要说什么petshop的分层了,完全是不同的概念
      

  26.   

    B/S和C/S这与两层和三层有啥关系呢?肯楼主先去弄懂B/S和C/S的概念吧
      

  27.   


    请看文章:
    2)B/S是三层C/S的一个特例,由于B/S结构是最常见的三层结构,也使其催生了三层结构的出现与发展,因此很多人误以为三层结构就是B/S结构,其实这种理解不正确的。 希望大家发表能提出实质性的反驳,而不是作没用功的挣扎。呵呵
      

  28.   

    wanghui0380的解释太深奥了,说到关心,我也关心WEB的发展,说到混淆了概念,你还是不认同:
    2)B/S是三层C/S的一个特例,由于B/S结构是最常见的三层结构,也使其催生了三层结构的出现与发展,因此很多人误以为三层结构就是B/S结构,其实这种理解不正确的。 坚守阵地来抵御我的攻击还不如摆出你的论点来回击我的观点呢。还说一点,我也信WEB。
      

  29.   

    什么叫做“面向数据服务”?所有的通讯都是为了传数据(假设控制信息也数据信息都算数据),说面向数据服务等于没说SOA的区别。从历史上(可以追述到20年前的软件工程教科书上关于系统之间的关系的分类标准),SOA本来就是面向业务服务的。当然像微软这样有能力的公司,在我们过去都推崇WCF正好可以进行SOA架构的时候,他却会在2010年才设计出一个可以把关系数据库记录的增删改查在wcf上发布的功能,这样我们就只好对修改原来的说法,WCF不仅仅可以用于SOA架构也可以用于两层架构。不考虑传统(20年前就成熟)的“服务”的概念,只抓出“数据”二字,恰好会退回到20年前。
      

  30.   

    过于2,我又看了你的文章,你确实提到两层c/s与三层c/s,当时我没有注意到你已经提到三层c/s。由于c/s这个概念被用烂了,而且说这个的人基本上就是说两层c/s,所以一般我不会去说“三层c/s”,直接谈面向业务服务api和面向数据库来架构的区别就足够直截了当地了。
      

  31.   

    说B/S是三层结构,我理解这基本上是从部署上说的,而不是从传统的三层来说的。传统的三层中任何层都可以以类似工厂的方式来“几乎在瞬间”配置完成,相对独立的。而B/S开发根本不涉及三层的技术。
      

  32.   

    就像ls sp1234大大说的,关键的是“服务”,领域上的分析,业务上的分析才是区别。你要论点我就给你论点“不是表象上的3层,而是服务上区别,你立足服务了才是分层,餐厅和你家的区别是服务,而不是跑堂滴”也许你会说跑堂滴就是一种服务,但餐厅的跑堂就是餐厅的全部服务??所以总归来说,分层并不是已表象上的那个服务器处理,而是OOA/D,是实实在在的领域业务分析
      

  33.   

    b/s有两层三层架构之分,c/s同样也有滴
      

  34.   


    WEB服务器的功能就是生成html供浏览器下载。所以,web服务器配合浏览器一起完成了客户浏览操作。可能你大多只是写过web服务器本地直接读取某种数据库进行SQL查询的程序。这是两层的。拿asp.net页面设计来说吧,假设你所有的界面都是将界面绑定到ObjectDataSource,那么你就“被迫”开始进行三层设计了,不管这个BLL是应用程序进程内、进程外,但是总之是将界面与它的数据之间的联系仅仅设计为一种面向对象的api,而不管是使用什么样的关系数据、甚至根本不使用关系数据库来持久化对象也丝毫不影响页面设计。
      

  35.   

    而不管是使用什么样的关系数据、甚至根本不使用关系数据库来持久化对象也丝毫不影响页面设计 -->   而不管是使用什么样的关系数据库、甚至根本不使用关系数据库来持久化对象也丝毫不影响页面设计在开发asp.net时就可以采取一种测试驱动方式,对于BLL层实现可以基于内存的对象集合来实现,并且可以初始化时给出一对随机生成的假的数据库数据。这样就可以快速测试你的程序,而不需要连接到真实的数据库。BLL是面向你开发界面时所需要的一些粗粒度的功能服务,跟表现层的一个个事务对应(而不是表现层去对数据库编程),表现层根本无需知道BLL内部是怎样实现这些功能的。
      

  36.   

    再举个反例,Silverlight的XAML双向绑定机制非常强悍,可以将界面双向绑定到资源中的数据的属性上。这就是MVC的概念,而不是三层概念。但是这个资源的数据怎样与(进程内或者进程外的)BLL层相互刷新,完全需要程序员手工写代码。Silverlight没有实现在XAML中通过非程序员在测试时简单设置就可以将处理这些资源的BLL层从一个切换到另一个的功能,这点上来说就比asp.net弱。
      

  37.   

    有自己的思想 又肯坦诚分享 这是非常好的,但是 我想很多楼友的意思 可能是在置疑楼主你的,实际动手能力,因为很多东西,确实是多想无益,容易流入空谈,不过吗,我下不了这个结论,我觉得楼主的思想 似乎还是有些清晰,当然我也说不出个所以然来。软件设计 是很重要的,但是 象 UML啊,分层啊这些,只是一方面,软件工程还有很多似乎更加显要的其它方面比如 说烂的数据结构啊,算法啊,好的思想 需要这些东西做为 实现的砖块,来加以搭建,只不过在面向对象的更高层次来说,需要把这些传统的东西,做一个 更高层次的 融纳。
      

  38.   

    个人觉,楼主把东西混到一起!
    BS。CS 和 几层没关系!
    不是说BS就一定3层,CS就2层了!你做BS开发 都用ObjectDataSource 来处理!UI在 ASPX,所有的逻辑判断都写 ASPX.cs这就是2层!不易扩展,难维护!所谓3层或多层:
    ASPX 和 ASPX.cs都应该归入 UI层(当然 有的人 认为 ASPX.cs 为业务层,也可以去解释)
    只处理数据显示 业务层:通过 实例化类,接口,函数等 带着需要的参数去 另一地方处理!实体层:更带进来参数,可能拼接各种SQL语句,并根据 数据层返回结果,生成DataSet或者 实例化各各实体类数据层:根据SQL语句,利用ADO对数据库直接操作!上面的2层BS就是吧 这边的前面3层都 合并 到一起!
    所以说,你说BS就3层,实在混乱概念!
      

  39.   


    引:《程序员考试考点分析与真题详解》飞思 ISBN 7-121-00762-2 
    (P380页)B/S结构是最经典的三层结构,它包括游览器(Browser)、Web服务器、数据库服务器三个部分。 
    (P381页)三层的C/S结构是在原二层C/S模式的基础上,加入应用服务器,使其成为三层的C/S计算模式。
      

  40.   

    good good study ,day day up
      

  41.   

    UI BLL DAL Model abstractfactory IDAL 实体产品
    没了
      

  42.   


    这话我喜欢。他虽然是有技术。但他从来不知道以前,他也是菜鸟走过来的。低调做人。我现在都还是菜鸟。学习一下,而且,每每问到一些对他们来说,可能是很简单的问题。他们就发一些压根儿不见有用的话:“你在这里问,还不如去MSDN找。”。类似这些话,我可以对这些朋友说,你在说“废话”。要的就是结果!这就是解决问题的最好方法。而不是简短,或是长篇大论的批判,:“去MSDN看吧”类似这样的朋友,我想问一下你们:“如果你不用QQ,用一下QQ吧,不要用MSDN,如果你不用MSN,用一下MSN吧,不要用MSN。”你们的回答,正像这样的无用对白。PS:我在CSDN在,虽然授教不少。很多一些技术不但好,而且帮助我们这些菜鸟,都非常有道的老师,我都非常感谢。但有一些虽然技术好,但也不要至于说一下无用的话,或是打击新人。最后说一句:“Mark Study Up.”;