《软件架构模式》-第一章分层架构(上)

第一章

分层架构

最通常的架构模式就是分层架构模式,即所谓的N层架构。这种模式对大部分JAVAEE应用程序来说是标准模式,因此被大部分架构师、软件设计师、开发者广泛知晓。由于分层架构模式和公司里传统的IT沟通以及组织结构非常类似,使得它成为大多数商务应用开发最自然的选择。

模式描述

在分层架构模式中,它将应用分成多个水平层,每个水平层在应用中担任一个专门的角色(比如表现层或者业务逻辑)。尽管分层架构模型并没有指定必须的层次个数以及类型,但大部分这种模型都由4个标准层次构成:表现层、业务层、持久层、数据库(图1)。在一些情况下,业务层和持久层可以合为一个单一的业务层中,特别是当持久层的逻辑(比如SQL或者HSQL)内嵌于业务层中。因此小应用程序通常只有三个层‑次,至于更大或者更多的复杂商业应用可能会包含5个或者更多的层次。

在此架构中每层都有一个特定的角色和责任。比如,表现层负责处理所有用户交互和浏览器沟通的逻辑,业务层可能会负责执行和要求相关的特定业务。架构中每层都是每个特定的小作业的抽象,比如表现层必须要或者担忧怎样拿到顾客的数据。它只需要按特定格式显示信息在屏幕上。而同理业务层也不需要担忧如果格式化地显示客户的数据或者甚至不需要知道客户数据是从哪里来。它只需要从持久层得到数据,基于数据执行业务逻辑(比如计算数值)再把信息上传给表现层。

这种模型一个强大的特征是隔离开组件按照不同层次。每个层次中的组件只需要处理属于那个层次的功能逻辑即可。比如在展示层的组件只需要处理展示的逻辑,而业务层中的组件只需要处理业务逻辑。这样的组件分类方式便于建立高效的角色和责任制的模型,同时也会方便开发、测试、管理、维护应用,因为设计完善的组件接口以及限制的组件功能范围。

关键概念

注意在图1-2中,架构中的每个层次被标记为封闭状态。在该架构模式中,这是一个非常重要的概念。一个封闭的层次意味着当需要把消息从一层传递给另一层时,它必须先通过位于第一层正下方的那层,才能达到再下面的一层。例如,一个来自于表现层的要求,必须先通过业务层、持久层才最终到达数据库。

那么为什么不让表现层直接到达数据库呢?这样速度会更快。这里就牵涉到了一个关键概念叫层次分离。

层次分离意味着不同层次间互不影响,你在一个层次上的改动不会影响其他层次。如果你让表现层能直接访问持久层,会导致任何在持久层SQL上面的改动既会影响业务层也会影响表现层,这造成了应用中不同组件之间的强耦合影响,这样的应用架构也会变得难以修改。

层次分离也意味着不同层次间相对独立,因此不需要知道另一个层次的内部实现。理解这一点,考虑一个把表现层架构从JSP转换成JSF的大型重构项目,假设表现层和业务层间的协议不变,那么业务层不受重构的影响,不会受表现层架构改变的影响。

闭合的层次达成层次分离,会有助于不同层间互不影响,但是也有需要层次开放的时候。例如,假设在一个架构中,有一些需要被业务层次的通用服务组件,因此你想要加一个共享服务层。在种情况,创建一个服务层通常是一个好办法。因为架构上,它限制了访问这些共享服务层的必须是业务层而不是表现层。如果没有一个单独的服务层,在架构上就不会限制表现层对其的访问,这样也会造成管理访问权限变得困难。

在这个例子中,新服务层位于业务层下,意味着表现层不能直接访问该层。然后新的问题是,业务层需要穿越新服务层才能到达持久层,这不符合逻辑。实际上,这个问题可以通过设置开放层次解决。

在图1-3所示,服务层被标志成开放状态,意味着业务层允许跨越这层而直接访问持久层。这在逻辑上是相符的。

借助闭环或者开环层次的概念帮助我们定义架构中层次间的关系以及方向流,同时提供给设计者和开发师必要的信息去理解不同层次的访问限制。没有记录或者没能和层间合适地沟通通常会导致过紧的耦合以及脆弱的难以测试、维护、部署的架构。

转载自 并发编程网 - ifeve.com

时间: 2024-08-01 14:28:04

《软件架构模式》-第一章分层架构(上)的相关文章

第一章——计算机系统架构介绍

1 介绍 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决. 计算机系统u燃机系统结构的层次结构设计如下:   每个层次之间都需要相互通信,既然需要通信就必须有一个通信的协议,也就是接口.一般接口的下面那层就是接口的提供者,接口由它定义:接口的上层就是接口的使用者,它使用该接口来实现需要的功能. 例如,从整个层次结构来看,开发工具与应用程序属于同一层次,它们都是要运行库提供的接口,也就是应用程序编程接口.应用程序接口的提供者就是运行库,什么样的运行库提供什么样的API.而对于操作系统

基于.NET平台的分层架构实战(七-外一篇)—对数据访问层第一种实现(Access+

基于.NET平台的分层架构实战(七-外一篇)-对数据访问层第一种实现(Access+SQL)的重构 昨天的文章基于.NET平台的分层架构实战(七)--数据访问层的第一种实现:Access+SQL发布后,很多朋友对我的程序提出了意见和建议,在这里先谢谢你们!!!尤其是金色海洋(jyk),对我的程序提出了很多建设性的意见. 我大体总结了一下,昨天程序的主要缺点有: 1.Connection对象没有关闭 2.DataReader对象没有关闭 3.相似代码太多,造成代码冗余. 其中第一点问题,目前还没有

一起谈.NET技术,走向ASP.NET架构设计——第四章:业务层分层架构(后篇)

今天的内容比较简单,也是本章的一个收尾! Anemic Domain Model 这种模式和之前讲述的Domain Model有很多的相似的地方.在之前的Domain Model中,每个业务类都包含了自己的业务逻辑和数据,以及对象之前的关系:但是在Anemic Domain Model,每个业务类仅仅只是包含了一些保存业务数据的属性,把相应的业务规则从原本的业务类中移到了另外的一个专门的业务规则类(Specification Pattern,我们后面的章节讲述),同时把相应的业务方法移到了ser

一起谈.NET技术,走向ASP.NET架构设计——第四章—业务层分层架构(中篇)

在上一篇文章中,我们讨论了两种组织业务逻辑的模式:Transaction Script和Active Record.在本篇中开始讲述Domain Model和Anemic Model. Domain Model 在开发过程中,我们常常用Domain Model来对目标的业务领域建模.通过Domain Model建模的业务类代表了目标领域中的一些概念.而且,我们会看到通过Domain Model建模的一些对象模拟了业务活动中的数据,有的对象还反映了一些业务规则. 我们就来看看电子商务系统的开发,在

走向ASP.NET架构设计第四章:业务层分层架构(后篇)

今天的内容比较简单,也是本章的一个收尾! Anemic Domain Model 这种模式和之前讲述的Domain Model有很多的相似的地方.在之前的Domain Model中,每个业务类都包含了自己的业务逻辑和数据,以及对象之前的关系:但是在Anemic Domain Model,每个业务类仅仅只是包含了一些保存业务数据的属性,把相应的业务规则从原本的业务类中移到了另外的一个专门的业务规则类(Specification Pattern,我们后面的章节讲述),同时把相应的业务方法移到了ser

Android群英传笔记——第一章:Android体系与系统架构

Android群英传笔记--第一章:Android体系与系统架构 图片都是摘抄自网络 今天确实挺忙的,不过把第一章的笔记做一下还是可以的,嘿嘿 1.1 Google的生态圈 还是得从Android的起源说起,Android是一个以Linux为基础的开源移动设备操作系统,主要用于智能手机和平板电脑,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中.Android已发布的最新版本为Android 6.0.1(M). Android系统最初由安

《游戏编程模式》一第1章 架构,性能和游戏

第1章 架构,性能和游戏 游戏编程模式在我们一头扎进一堆模式之前,我想为你介绍一些关于我如何看待软件架构以及它是如何应用到游戏的一些背景,这可能会帮助你更好地理解这本书的其余部分.至少,当你陷入关于设计模式和软件架构是多么糟糕(或者很棒)的一场争论中时,它会给你一些论据来使用. 请注意,我没有假设你站在争论中的哪一方.就像任何军火商一样,我为所有战斗方提供武器.

Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是"活动"的意思,但是主席觉得这样翻译有些生硬,直接翻译成"界面"可能更好,的确,Activity主要也是用于U

java-分层开发模式,分层架构

问题描述 分层开发模式,分层架构 问:? 10 分层开发模式那个分层开发,Sql语句是写在数据库访问层还是说写在业务逻辑层然后将语句传到数据库访问层?或者说是将实体传到数据库访问层,在数据库访问层编写sql语句 解决方案 一般分为三层 1.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得. 2.业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理. 3.数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添.删除.修改