什么是分层架构模式及常见的分层架构模式
2013-05-20 18:13 youxin 阅读(9991) 评论(0) 编辑 收藏 举报什么是分层架构模式
分层(Layer)模式是最常见的一种架构模式。甚至说分层模式是很多架构模式的基础,本章下面讲到的一些内容实际上都和分层模式相关联。
分层描述的是这样一种架构设计过程:从最低级别的抽象开始,称为第1层。这是系统的基础。通过将第J层放置在第J-1层的上面逐步向上完成抽象阶梯,直到到达功能的最高级别,称为第N层。
因而分层模式就可以定义为:将解决方案的组件分隔到不同的层中。每一层中的组件应保持内聚性,并且应大致在同一抽象级别。每一层都应与它下面的各层保持松散耦合。
分层模式的关键点在于确定依赖:即通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。
相对于分层,还有一种概念叫分区。分层是对架构的横向划分,而分区是对架构的纵向划分。
典型的分层方式是应用程序专用功能位于上层,跨越应用程序领域的功能位于中层,而配置环境专用功能位于低层。层的数量与组成取决于问题领域和解决方案的复杂程度。通常而言只有一个应用程序专用层。应当把子系统组织成分层结构,架构的上层是应用程序专用子系统,架构的低层是硬件和操作专用子系统,中间件层是通用服务。
对系统进行分层有如下基本原则:
— 可见度。各子系统只能与同一层及其下一层的子系统存在依赖关系。
— 易变性。最上层放置随用户需求的改变而改变的元素。最底层放置随实施平台(硬件、语言、操作系统、数据库等)的改变而改变的元素。中间的夹层放置广泛适用于各种系统和实施环境的元素。如果在这些大类中进一步划分有助于对模型进行组织,则添加更多的层。
— 通用性。一般将抽象的模型元素放置在模型的低层。如果它们不针对于具体的实施,则倾向于将其放置在中间层。
— 层数。对于小型系统,三层就足够了。对于复杂系统,通常需要5-7层。无论复杂程度如何,如果超过10层,就需要慎重考虑了。层数越多,越需慎重。
常见的分层架构模式
1.客户端-服务器模型(Client-Server,C/S)。
2.三层模型:用户表示层、业务逻辑层、数据层。
3.多层结构的技术组成模型:表现层、中间层、数据层。
4.网络系统常用三层结构:核心层、汇聚层和接入层。
5.RUP典型分层方法:应用层、专业业务层、中间件层、系统软件层。
6.基于Java的B/S模式系统结构:浏览器端、服务器端、请求接收层、请求处理层。
7.某六层结构:功能层(用户界面)、模块层、组装层(软件总线)、服务层(数据处理)、数据层、核心层。
另一篇:
--------------------------------------------------------------------------------------------
第一章:分层
作用:分解复杂的软件系统
优点:1、降低复杂度,上层不需要关注下层细节。
2、提高灵活性,可以灵活替换某层的实现。
3、减小耦合度,将层次间的依赖减到最低。
4、有利于重用,同一层次可以有多种用途。
5、有利于标准化。
缺点:1、不能封装所有工作,可能会带来及联修改。
2、过多层次影响性能。
难点:1、如何划分层次。
2、定义层次职责。
分层演化过程:
单层架构-->两层架构-->三层架构-->N层架构
单层架构:早期批处理系统
两层架构:C/S 客户/服务器模式
特点:没有复杂的领域逻辑
优点:有非常好的工具支持,VB、Delphi、PowerBuilder
缺点:代码冗余,难于维护。
模式:1、领域逻辑写在客户端
2、领域逻辑写在数据库(存储过程)
面向对象技术、WEB兴起、Java出现共同推进了三层架构。
Layer与Tier的区别:
1、Tier强调物理上的分离,Two Tier System。
2、Layer强调逻辑上的分层。
三层架构:表现层-领域层-数据源层(持久层)
1、表现层:提供服务,显示信息。
2、领域层:系统核心逻辑。
3、数据源层:与数据库、消息系统以及其他软件包通信
------------------------------------------------------------------------------------------------
另一篇:
几种常见架构模式
前文讲过,在实践中,人们总结出了一些常用的软件系统结构高层模式,以供应用系统设计时参考。这些模式包括:单服务两层/多层C/S;MVC结构;面向服务的SOA与多服务集合;数据交换总线等。
1. 单机应用系统(Standalone)
准确地讲,单机应用系统是最简单的软件结构,是指运行在一台物理机器上的独立应用程序。当然,该应用可以是多进程或多线程的。
在信息系统普及之前的时代,大多数软件系统其实都是单机应用系统。这并不意味着它们简单,实际情况是,这样的系统有时更加复杂。这是因为软件技术最初普及时,多数行业只是将软件技术当做辅助手段来解决自己专业领域的问题,其中大多都是较深入的数学问题或图形图像处理算法的实现。
有些系统非常庞大:笔者早年曾经参与的一个大型纯软件系统开发,多达160万行程序!要知道,这些程序当时可都是一行行写出来的。这应该算是一个超大型的软件系统了,共有十多个子系统集成在一个图形界面上执行,并可在多行UNIX/DOS平台下运行,其中很多算法的复杂困难程度,可以说,如果讲给今天这些所谓的架构高手与计算机高手听,他们会感觉如听“天书”一般深奥;有些系统则算法非常复杂:我的一个同学,在他们专业领域内编制的软件程序,在当时最高级的专业工作站上(应该要比今天的最快的微机性能还好些),一敲回车键运行,就往往要等待一个星期的时间才能得到结果。
而这些软件系统,从今天的软件架构上来讲,却很简单,是标准的单机系统。即便是今天,复杂的单机系统也有很多,它们大多都是专业领域的产品,如CAD/CAM领域的CATIA、ProEngineer,Autodesk的AutoCAD,还有我们熟悉的Photoshop、CoralDraw,等等(这些系统的高级版本可能提供了一些网络化的功能,但改变不了其单机系统的实质)。
所以这里笔者要说的是,软件架构复杂并不代表软件系统复杂,其实,软件架构设计较为重要的领域只有一个,那就是信息系统领域,即以数据处理(数据存储,传输,安全,查询,展示等)为核心的软件系统。其他行业的软件应用对该概念其实并不是那么强调。
所以,读者应该明白,后面几节介绍的所谓流行软件架构,都是指在信息系统的领域内。
2. 客户机/服务器(Client/Server)结构
客户机/服务器结构是软件系统中最常见的一种。笔者认为该概念应该来源于基于TCP/IP协议的进程间通信IPC编程的“发送”与“反射”程序结构,即Client方向Server方发送一个TCP或UDP包,然后Server方根据接收到的请求向Client方回送TCP或UDP数据包(这里是指建立TCP/IP连接以后的应用程序逻辑,不涉及如TCP建立连接的三方握手过程),IPC编程的客户端/服务器概念图如图6-2所示。、
诚然,上述IPC编程中的客户与服务,在过去只是一个再普通、传统不过的标准程序结构与编程方法,不会有人将其提高到软件架构的高度。但其实,现代流行的各种C/S架构,其本质却正是如此:即TCP/IP IPC编程中的客户机/服务器。目前为止,还没有任何一种客户机/服务器架构的软件超出了这个范围。
所以,准确地讲,现代各种客户机/服务器模式的软件架构实际上是对IPC编程中客户/服务程序结构更加产品化与成熟化的结果。
让我们来看看几种常见的客户机/服务器的软件结构。
● 两层C/S
两层C/S,其实完全是IPC客户端/服务器结构的应用系统体现。两层C/S其实就是人们所说的“胖客户端”模式。
在实际的系统设计中,该类结构主要是指前台客户端+后台数据库管理系统,如图6-3所示。
在两层C/S结构中,图6-3前台界面+后台数据库服务的模式最为典型,前文所说的很多数据库前端开发工具(如PowerBuilder、Delphi、VB)等都是用来专门制作这种结构的软件系统的。
有人也许要问,上述典型的两层C/S模式应该没有你所说的TCP/IP通信呀?怎么你前面讲所有的C/S模式都脱离不了这个范围呢?其实,每一种数据库都提供了其专用的访问API或通用的ODBC/JDBC接口,如果这个数据库的开发支持从不同的机器上以网络方式连接,则笔者相信其在客户端与数据库后台的通信大多情况下是TCP/IP的客户机/服务器模式!如果这个数据库不支持网络连接方式(如以前基于FoxBase的开发,或现在基于MS Access的开发),则我们不能称这个软件是C/S模式。
另外,如图6-3所示,两层C/S实际上是将前台界面与相关的业务逻辑处理服务的内容集成在一个可运行单元中了。
层C/S结构与B/S
三层C/S结构如图6-4(a)所示,其前台界面送往后台的请求中,除了数据库存取操作以外,还有很多其他业务逻辑需要处理。三层C/S的前台界面与后台服务之间必须通过一种协议(自开发或采用标准协议)来通信(包括请求、回复、远程函数调用等),通常包括以下几种:
(1)基于TCP/IP协议,直接在底层socket api基础上自行开发。这样做一般只适合需求与功能简单的小型系统;
(2)首先建立自定义的消息机制(封装TCP/IP与socket编程),然后前台与后台之间的通信通过该消息机制来开发。消息机制可以基于XML,也可以基于字节流(Stream)定义。虽然是自开发,但可以基于此构建大型分布式系统;
(3)基于RPC编程;
(4)基于CORBA/IIOP协议;
(5)基于Java RMI;
(6)基于J2EE JMS;
(7)基于HTTP协议。如浏览器与Web服务器之间的交流便是如此。需要指出的是,HTTP不是面向对象的,所以面向对象的应用数据会被首先平面化后进行传输。
目前最典型的基于三层C/S结构的应用模式便是我们最熟悉、较流行的B/S(Brower/Server,浏览器/服务器)模式,如图6-4(b)所示。
图6-4(b)的B/S结构中,Web浏览器是一个用于文档检索和显示的客户应用程序,并通过超文本传输协议HTTP(HyperText Transfer Protocol)与Web服务器相连。该模式下,通用的、低成本的浏览器节省了两层结构的C/S模式客户端软件的开发和维护费用。这些浏览器大家都很熟悉,包括MS Internet Explorer、Mozilla FireFox、NetScape等。
Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器(客户端)连到服务器上并请求文件或数据时,服务器将处理该请求并将文件或数据发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP(超文本传输协议)进行信息交流,这就是人们常把它们称为HTTPD服务器的原因。
我们每天都在Web浏览器上进行各种操作,这些操作中绝大多数其实都是在Web服务器上执行的,Web浏览器只是将我们的请求以HTTP协议格式发送到Web服务器端或将返回的查询结果显示而已。当然,驻留Web浏览器与服务器的硬件设备可以是位于Web网络上的两台相距千里的计算机。
应该清楚,B/S模式的浏览器与Web服务器之间的通信仍然是TCP/IP,只是将协议格式在应用层标准化了而已。实际上B/S是采用了通用客户端界面的三层C/S结构。
转自:http://book.51cto.com/art/201004/195732.htm