服务分层的陷阱

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 【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月前
|
人工智能 监控 数据可视化
什么是低代码开发平台?2025年最热门的10大低代码开发平台盘点!
低代码开发平台通过可视化拖拽、模型驱动等方式,大幅减少手工编码,提升应用开发效率。当下更是结合AI能力,自动生成应用,组件,图表,进一步加快应用软件的开发效率落地。
|
10月前
|
人工智能 数据可视化 数据处理
低代码:如何实现高效开发的技术解读
低代码开发平台正重塑软件开发流程,通过可视化界面和拖拽式组件设计,使开发变得简单高效。它不仅降低了开发门槛,让初学者也能轻松创建复杂应用,还显著提升了团队协作效率和应用质量。核心引擎的优化升级进一步增强了开发灵活性与性能,支持SQL智能优化、模块化扩展、实时渲染等特性。模型驱动开发和自动化代码生成技术确保了应用的一致性和规范性,满足复杂业务需求。此外,AI融合、插件生态及开放架构为开发者提供了强大的技术支持和丰富的功能选择,推动企业实现高效的数字化转型。低代码开发正在引领一个更加高效、创新和包容的未来。
|
3月前
|
监控 负载均衡 关系型数据库
读写分离实战:提升MySQL并发处理能力
本文深入解析了MySQL读写分离的核心策略,涵盖架构设计、应用层及中间件实现、负载均衡、数据一致性保障、故障处理、性能监控与实战部署方案,助你构建高性能数据库架构,提升系统吞吐量与可用性。
|
8月前
|
人工智能 JSON API
0代码将存量 API 适配 MCP 协议
本文主要讲述通过 Nacos+Higress 的方案实现0代码改造将 Agent 连接到存量应用,能够显著降低存量应用的改造成本。
1071 44
0代码将存量 API 适配 MCP 协议
|
机器学习/深度学习 人工智能 自然语言处理
软件测试的未来趋势:AI与自动化的融合
随着技术的不断进步,软件测试领域正迎来一场革命。本文将探讨人工智能(AI)和自动化技术如何共同推动软件测试的发展,提高测试效率,减少人为错误,并预测未来的发展趋势。通过分析当前市场上流行的测试工具和方法,以及它们如何整合AI和自动化技术,我们将揭示这一领域即将迎来的变革。
567 29
无需下载!上无影云开启《黑神话:悟空》
上无影云开启《黑神话:悟空》
352 8
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
Java 关系型数据库 MySQL
MyBatis模糊查询like的三种方式
MyBatis模糊查询like的三种方式
659 0