日期:2014-05-20  浏览次数:20787 次

真正的三层结构,初学者的最佳入门。
我很爱国!

今天给大家解释一下我对三层结构的理解,也希望能为初学者提供一些参考。

大家的疑问:
三层结构是什么?
我们该不该推荐三层结构?
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)

由于本人表达能力差,今天先到此。


------解决方案--------------------
嗯,了解下
------解决方案--------------------
基本上楼主是把几个概念几个术语几个名词给混淆了...你是把《软件工程方法学》和《程序设计方法学》两个不同学科的概念硬拉到一起去说...

书不在读而在悟,道不在论而在行...又言,尽信书不如无书...
------解决方案--------------------
参悟
------解决方案--------------------
JF