软件架构模式-读书笔记(1)-分层架构
发布日期:2021-10-03 22:59:31 浏览次数:25 分类:技术文章

本文共 2283 字,大约阅读时间需要 7 分钟。

软件架构模式(Software Architecture Pattern)是Mark Richards编写的介绍各种软件架构设计模式的书,目的是给架构师足够的信息去做出正确的架构决策。

1 简介

应用程序缺乏合理的架构一般会导致程序过度耦合、容易被破坏、难以应对变化,同时很难有一个清晰的版本或者方向性。这样的结果是,如果你没有充分理解程序系统里每个组件和模块,就很难定义这个程序的结构特征。有关于程序的部署和维护的基本问题都难以回答,比如:程序架构是什么规模?应用程序有什么性能特点?应用程序有多容易应对变化?应用程序的部署特点是什么?架构是如何反应的?

架构模式帮助你定义应用程序的基本特征和行为。例如,一些架构模式会让程序自己自然而然地朝着具有良好伸缩性的方向发展,而其他架构模式会让程序朝着高度灵活的方向发展。知道了这些特点,了解架构模式的优点和缺点是非常必要的,它帮助我们选择一个适合自己特定的业务需求和目标的的程序。

作为一个架构师, 你必须证明你的架构模式的决策是正确的,特别是当需要选择一个特定的体系结构模式或方法的时候。这本书的目的就是给出足够的信息让你去做出正确的架构决策。

这本书主要介绍了分层架构,事件驱动架构,微内核架构,微服务架构和基于空间的架构这五种架构模式。下表是这五种架构模式优缺点的比较。

2 分层架构

分层架构模式里的组件被分成几个平行的层次,每一层都代表了应用的一个功能(展示逻辑或者业务逻辑)。尽管分层架构没有规定自身要分成几层几种,大多数的结构都分成四个层次: 展示层,业务层,持久层和数据库层。

分层架构中的每一层都有特定的角色和职能。举个例子,展示层负责处理所有的界面展示以及交互逻辑,业务层负责处理请求对应的业务。架构里的层次是具体工作的高度抽象,它们都是为了实现某种特定的业务请求。比如说展示层并不需要关心怎样得到用户数据,它只需在屏幕上以特定的格式展示信息。业务层并不关心要展示在屏幕上的用户数据格式,也不关心这些用户数据从哪里来。它只需要从持久层得到数据,执行与数据有关的相应业务逻辑,然后把这些信息传递给展示层。

关注点分离

分层架构的一个突出特性是组件间关注点分离(separation of concerns)。一个层中的组件只会处理本层的逻辑。比如说,展示层的组件只会处理展示逻辑,业务层中的组件只会去处理业务逻辑。

层隔离

分层架构的另一个特点是层隔离。层隔离就是说架构中的某一层的改变不会影响到其他层:这些变化的影响范围限于当前层次。

污水池反模式

使用此模式需要注意的问题是污水池反模式 (architecture      sinkhole   anti-pattern)。在这个模式中,请求流只是简单的穿过层次,不留一点云彩。比如说界面层响应了一个获得数据的请求。响应层把这个请求传递给了业务层,业务层也只是传递了这个请求到持久层,持久层对数据库做简单的SQL查询获得用户的数据。这个数据按照原理返回,不会有任何的二次处理,返回到界面上。

每个分层架构或多或少都可能遇到这种场景。关键在于这样的请求有多少。80-20原则可以帮助你确定架构是否处于反污水模式。大概有百分之二十的请求仅仅是做简单的穿越,百分之八十的请求会做一些业务逻辑操作。然而,如果这个比例反过来,大部分的请求都是仅仅穿过层,不做逻辑操作。那么开放一些架构层会比较好。不过由于缺少了层次隔离,项目会变得难以控制。

 

技术实现

从技术的角度来说,有很多的方式能够实现这些模块。比如说在Java平台中,customer screen对应的是(JSF)     Java         Server Faces, 用bean组件来实现customer delegate。用本地的Spring bean或者远程的EJB3   bean来实现业务层中的customer object。数据访问可以用简单的POJP's(Plain     Old   Java Objects),或者可以用MyBatis,还可以用JDBC或者Hibernate查询。

分层架构的优劣势分析

方向

评级

分析

整体灵活性

总体灵活性是响应环境变化的能力。尽管分层模式中的变化可以隔绝起来,想在这种架构中做一些改变也是费时费力的。分层模式的笨重以及经常出现的组件之间的紧耦合是导致灵活性降低的原因

易于部署

这取决于你怎么发布这种模式,发布程序可能比较麻烦,尤其是很大的项目。一个组件的小小改动可能会影响到整个程序的发布(或者程序的大部分)。发布必须是按照计划,在非工作时间或者周末进行发布。因此,分层模式导致应用发布一点也不流畅,在发布上降低了灵活性。

可测试性

因为组件都处于各自的层次中,可以模拟其他的层,或者说直接去掉层,所以分层模式很容易测试。开发者可以单独模拟一个展示组件,对业务组件进行隔绝测试。还可以模拟业务层来测试某个展示功能。

性能

尽管某些分层架构的性能表现的确不错,但是这个模式的特点导致它无法带来高性能。因为一次业务请求要穿越所有的架构层,做了很多不必要的工作。

伸缩性

由于这种模式以紧密耦合的趋势在发展,规模也比较大,用分层架构构建的程序都比较难以扩展。你可以把各个层分成单独的物理模块或者干脆把整个程序分成多个节点来扩展分层架构,但是总体的关系过于紧密,这样很难扩展。

易开发性

容易

在开发难度上面,分层架构得到了比较高的分数。因为这种架构对大家来说很熟悉,不难实现。大部分公司在开发项目时都是通过层来区分技术的,这种模式对于大多数的商业项目开发来说都很合适

 

转载地址:https://blog.csdn.net/lclfans1983/article/details/115693676 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:软件架构模式-读书笔记(2)-事件驱动架构
下一篇:架构师都需要了解的康威定律(Konway‘s Law)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月10日 20时39分35秒