服务分层的陷阱

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
简介: 【6月更文挑战第30天】本文介绍分层架构,这是一种通用的软件设计模式,常被称为N层架构。设计时需避免“污水池反模式”,注意不要让层变得过于庞大。尽管有局限,分层架构因其复用性、可维护性和可扩展性而广泛使用。

1 简介

通常在一个应用中,也很难有固定的分层。
软件体系结构为软件系统提供了结构、行为和属性的高级抽象,

在使用时可能随着时间推移分层越来越多,
这些抽象和分层由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。

treeoflife6.png

而软件层次式体系结构是最通用的架构,
也被叫作N层架构模式(n-tier architecture pattern)。

这种架构模式非常适合传统的IT通信和组织结构,
很自然地成为大部分应用的第一架构选择。

在分层次体系结构中的组件被划分成几个层,每个层代表应用的一个功能,都有自己的角色和职能。
分层架构的一个特性就是关注分离(separation of concerns)。

该层中的组件只负责本层的逻辑,组件的划分很容易明确组件的角色和职责,
也比较容易开发、测试、管理和维护。

分层架构(Layered Architecture)是最常见的软件架构,也是事实上的标准架构。

事实上人类认知方式也是通过层次划分,在现实宇宙中,如太阳系从内层到外层结构:

image.png

2 如何设计层次架构

考虑软件体系结构通常从三个方面出发:

  • (1)利益相关人员之间的交流。

软件体系结构是一种常见的系统抽象,代码级别的系统抽象仅仅可以成为程序员的交流工具,
而包括程序员在内的绝大多数系统的利益相关人员都借助软件体系结构来作为相互沟通的基础。

  • (2)系统设计的前期决策。

软件体系结构是我们所开发的软件系统最早期设计决策的体现,
而这些早期决策对软件系统的后续开发、部署和维护具有相当重要的影响。

这也是能够对系统进行分析的最早时间点。

  • (3)可传递的系统级抽象。

软件体系结构是关于系统构造以及系统各个元素工作机制的相对较小、却又能够突出反映问题的模型。

由于软件系统具有的一些共通特性,这种模型可以在多个系统之间传递,
特别是可以应用到具有相似质量属性和功能需求的系统中,并能够促进大规模软件的系统级复用。

分层架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。
层与层之间通过接口进行通信。分层架构通常明确约定软件一定要分成多少层,
但是,最常见的是四层结构,

image.png

如下所述。

●表现层(Presentation Layer);

用户界面,负责视觉和用户互动;

●业务层(Business Layer):

实现业务逻辑;

●持久层(Persistence Layer):

提供数据,SQL语句就放在这一层;

●数据库(Database Layer):

保存数据。

image.png

有的项目在逻辑层和持久层之间加了一个服务层(Service),提供不同业务逻辑需要的一些通用接口。

用户的请求将依次通过这四层的处理,不能跳过其中任何一层。

分层式体系结构是一种最常见的架构设计方法,能有效地使设计简化,使设计的系统机构清晰,便于提高复用能力和产品维护能力。

3 小结

分层架构强调关注点分离,将组件划分为多个层,如表现层、业务层、持久层和数据库层,各层有明确职责,通过接口通信。

分层架构利于交流、早期决策和系统抽象,但可能降低整体敏捷性、易部署性和性能,适合对稳定性和可维护性要求高的系统。

目录
相关文章
|
2天前
|
Java 持续交付 数据库
避免服务分层污水池反模式
【6月更文挑战第30天】本文介绍污水池反模式,分层架构在敏捷性、部署性和性能方面得分较低,但具有高测试性和易开发性。关键在于合理分层以降低耦合和提高解耦效果。
15 1
避免服务分层污水池反模式
|
26天前
|
架构师 持续交付 微服务
探索软件架构设计的深层逻辑
【6月更文挑战第5天】在数字化浪潮中,软件架构设计如同搭建一座虚拟的巴别塔,它不仅需要承载技术的重量,还要预见未来的需求。本文将通过我的个人经验,探讨如何在变化莫测的技术海洋中,寻找到稳固的架构基石,以及如何让这座塔楼灵活地适应不断变化的环境。
16 1
|
2月前
|
存储 安全 Java
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
|
2月前
|
设计模式 IDE Java
谈谈过度设计:因噎废食的陷阱
本文探讨了设计模式在软件开发中的应用和争议,指出设计模式虽有助于应对软件复杂性,但在互联网快速迭代的背景下,可能会导致过度设计,增加理解和修改成本。文章分析了设计模式的缺陷,如开闭原则可能导致不易修改,最小知识原则可能导致理解困难。同时,文章强调了设计模式的重要性,指出它们可以提高代码的可理解性和模块的可维护性,并提出了通过函数式设计模式进行优化的示例。作者认为,设计模式需要随着业务演进而不断演进,同时提倡使用可调试的模块和模式演进来促进系统的成长性。文章最后提醒读者,要根据实际情况选择是否使用设计模式,避免因噎废食。
162 9
|
消息中间件 JavaScript 小程序
架构设计:为什么说复用是邪恶的?
架构设计:为什么说复用是邪恶的?
|
JSON 缓存 监控
代码分层设计
在搭建一个项目之前,除了要进行架构和业务方面的设计和分析,往往还需要对代码的结构进行规范化设计。而分层思想,是应用系统最常见的一种架构模式。
496 0
|
SQL Cloud Native 数据可视化
模块化思想在实践中的应用
各种编程语言中的函数,数据仓库的标签体系,甚至于数据中台的核心理念,都是把模块化的思想发挥到了极致,避免了我们重复造轮子,消除了数据烟囱,用最小的投入获得了最大的产出。
模块化思想在实践中的应用
|
存储 程序员 虚拟化
|
前端开发 Oracle 关系型数据库
【代码分层结构设计】思想学习
本文主要摘录个人写代码的心得体会。
136 0