我很爱国!今天给大家解释一下我对三层结构的理解,也希望能为初学者提供一些参考。大家的疑问:
三层结构是什么?
我们该不该推荐三层结构?
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) 由于本人表达能力差,今天先到此。
三层结构是什么?
我们该不该推荐三层结构?
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) 由于本人表达能力差,今天先到此。
v老师又来捧场了,文章中说明了我的看法,PETSHOP更多体现的是软件工程的问题,而不是解决两层结构中不足和问题。所以也跟你说的误导了一大堆的读者。三层结构为什么而来?为的就是解决两层结构中的问题。文章最的我也提到PETSHOP值得学习的。
三层结构的设计是为了解决两层结构带来的问题,而MVC所解决的是软件工程(软件危机)的问题,两者是不一样的。PETSHOP示例是给大家展示”如何“处理软件危机的,而不是处理两层结构带来的问题的!!!所以不是真正的三层结构。
v老师我不是误导是引导,很感谢你的发表,但你的发表看不出实质的问题实质的东西。
v老师我发现一下对你的看法,但不要生气。我觉得你的发言很不负责任。交流平台不只是为了“分数”,不只是为了流量的。摆明自己的观点与大家一起交流才是这个交流平台所起的重要作用。如果你真的要发表意见希望你能把“.NET PetShop仅仅是个Sample”这个观点再详细描述一下,让广大初步者受益。我希望大家能反驳,而不仅仅只是说我误导大家,又说不出原由。这是很危险的。
我引用一下RedSoft在cnblogs里面的话:
--------------------------------引用--------------------------------------
从三层和MVC形成来看,两者没有任何的关系,如博主写的三层的形成背景一样,而MVC是人们归纳总结出的一种设计模式。一个是体系结构,一个是设计模式。三层解决的问题是:将软件项目任务分配到三个不同的处理层,并且各司其职,体系结构非常清晰。MVC解决的问题是:视图和控制分离,降低耦合(根本没有涉及数据),并且在多数人认同这种模式的时候,降低了维护成本。MVC往往运用到三层当中,所以让人有些误解他们的关系。如你使用的asp.net mvc、struts都是mvc模式的现实,而他们可以运用到各自的三层架构当中。
-------------------------------------------------------------------------我再补充一点的是,设计模式的提升解决的更多是软件危机的问题。
henry:你用了它后感觉很不爽,很难维护那用它意义又何在呢?模式没有真不真正,只有使用技巧,如何的合理使用它.对于PETSHOP学习一下,了解一下别人为什么这样做是有好处的,但实际情况是不是真的有必要完全这样干就不一定的.没有最好的方法,只是适合的方法.
-------------------------------------------------------------------------------------你这个观点很好,其实要说的是在实际开发中按开发团队的规模来实行解决软件工程(软件危机)的问题。小作坊使用PETSHOP可能觉得麻烦,一个人开发一个人修改需求随变随改很方便,但小作坊模式到比较大规模团队中使用的话就变得难以进行了,比如代码不可维护(别人是维护不了你的代码的或者难以维护的很多BUG不敢动的)、代码不能复用(复制贴粘现在很流行了)、成本不断的提高……等。
1)我说的哪个观点不是软件工程的?
2)我觉得三层结构应该是从两层结构发展过来的,三层结构提出来的必然性是它解决了两层结构存在的问题。或者再说一个比方,两层结构和三层结构中都可以使用MVC。
面向服务进行设计的目的是理顺大型系统的设计主次关系,避免将系统前台最突出的创意与后台最底层的数据库牵强地纠缠在一起而带来的架构风险。
1)我的分层角度是从解决系统问题,而不是解决软件工程问题来分层。
2)我觉得我们的沟通交流还存在一些问题,呵呵。三层结构是为了解决两层结构带来的问题的,
首先看两层中带来的部分问题如:
在两层C/S中,随着新的应用在服务器上成倍地增加,连接到服务器上的客户端也日益增多,服务器很快就进入超负荷运行状态,成了一个瓶颈。三层或N层的计算模式就是为了解决这一问题应运而生的。PETSHOP解决了什么问题?最能体现的就是解决软件危机的问题,就像你说的不同域的问题,那就更向大家要解释清了。PETSHOP是解决了两层结构中出现的问题而应运而生的吗?这当然不是的。
1)SOA(Service-Oriented Architecture)即面向服务的体系结构,简单的把面向服务的体系结构解释成面向业务服务架构(SOA),这种看法可能狭窄了一些。如果非得要这么形容,我觉得“面向数据服务架构”会不会更好些呢?
2)你提到的“客户机-服务器”结构,把远程数据库服务器功能映射为本地数据操作,靠数据库系统自身的低层次的通讯协议来完成网络数据处理功能。可能就是我所说的两层C/S结构。
3层B/S!!亏的你能这么说,我想问一句,腾讯的QQ是不是C/S,请问腾讯的QQ有几层?把你这附图,换几个东西。QQ客户端--QQ通讯服务器--QQ数据库,他就不行了,就走不通了??
比较过时的是两层C/S。
还是引用RedSoft的话:
三层解决的问题是:将软件项目任务分配到三个不同的处理层,并且各司其职,体系结构非常清晰。B/S本身就是三层的C/S平台,WEB应用就是在该三层C/S平台上做二次开发。这是我的愚见。
而且PETSHOP是在设计过程中为了解决软件危机所应运而生的在设计时分为“三层”,而非三层结构的本质。
2)对于wanghui0380提到的那个图,理解可能根据不同人不同理解,我会把基于TCP的HTTP协议看作是数据传输层。
3)WEB服务器与数据库看成是业务逻辑层。
【它自己也矛盾起来,不断的列举XX的作品,大谈N多名词概念,以填充自己内心的空虚和恐惧】
-------------------
BS也好,CS也罢,和分层设计并没有本质联系。一个人脑袋里装的东西,也同时决定了它的产物。
如果我错了希望用你的高尚品德来耐心教我,而不是指责、讥骂,虽然我不介意你这么做。
请看文章:
2)B/S是三层C/S的一个特例,由于B/S结构是最常见的三层结构,也使其催生了三层结构的出现与发展,因此很多人误以为三层结构就是B/S结构,其实这种理解不正确的。 希望大家发表能提出实质性的反驳,而不是作没用功的挣扎。呵呵
2)B/S是三层C/S的一个特例,由于B/S结构是最常见的三层结构,也使其催生了三层结构的出现与发展,因此很多人误以为三层结构就是B/S结构,其实这种理解不正确的。 坚守阵地来抵御我的攻击还不如摆出你的论点来回击我的观点呢。还说一点,我也信WEB。
WEB服务器的功能就是生成html供浏览器下载。所以,web服务器配合浏览器一起完成了客户浏览操作。可能你大多只是写过web服务器本地直接读取某种数据库进行SQL查询的程序。这是两层的。拿asp.net页面设计来说吧,假设你所有的界面都是将界面绑定到ObjectDataSource,那么你就“被迫”开始进行三层设计了,不管这个BLL是应用程序进程内、进程外,但是总之是将界面与它的数据之间的联系仅仅设计为一种面向对象的api,而不管是使用什么样的关系数据、甚至根本不使用关系数据库来持久化对象也丝毫不影响页面设计。
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层,实在混乱概念!
引:《程序员考试考点分析与真题详解》飞思 ISBN 7-121-00762-2
(P380页)B/S结构是最经典的三层结构,它包括游览器(Browser)、Web服务器、数据库服务器三个部分。
(P381页)三层的C/S结构是在原二层C/S模式的基础上,加入应用服务器,使其成为三层的C/S计算模式。
没了
这话我喜欢。他虽然是有技术。但他从来不知道以前,他也是菜鸟走过来的。低调做人。我现在都还是菜鸟。学习一下,而且,每每问到一些对他们来说,可能是很简单的问题。他们就发一些压根儿不见有用的话:“你在这里问,还不如去MSDN找。”。类似这些话,我可以对这些朋友说,你在说“废话”。要的就是结果!这就是解决问题的最好方法。而不是简短,或是长篇大论的批判,:“去MSDN看吧”类似这样的朋友,我想问一下你们:“如果你不用QQ,用一下QQ吧,不要用MSDN,如果你不用MSN,用一下MSN吧,不要用MSN。”你们的回答,正像这样的无用对白。PS:我在CSDN在,虽然授教不少。很多一些技术不但好,而且帮助我们这些菜鸟,都非常有道的老师,我都非常感谢。但有一些虽然技术好,但也不要至于说一下无用的话,或是打击新人。最后说一句:“Mark Study Up.”;