服务分层的陷阱

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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 小结

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

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

目录
相关文章
|
5月前
|
人工智能 JSON API
0代码将存量 API 适配 MCP 协议
本文主要讲述通过 Nacos+Higress 的方案实现0代码改造将 Agent 连接到存量应用,能够显著降低存量应用的改造成本。
814 44
0代码将存量 API 适配 MCP 协议
|
存储 自然语言处理 C#
WPF技术之Binding
WPF(Windows Presentation Foundation)是微软推出的一种用于创建应用程序用户界面的框架。Binding(绑定)是WPF中的一个重要概念,它用于在界面元素和数据源之间建立关联。通过Binding,可以将界面元素(如文本框、标签、列表等)与数据源(如对象、集合、属性等)进行绑定,从而实现数据的双向传递和同步更新。
585 2
WPF技术之Binding
|
存储 安全 网络安全
|
弹性计算 Ubuntu Linux
【幻兽帕鲁Palworld】搭建服务器配置参数说明,附阿里云幻兽帕鲁服务器搭建教程
创建幻兽帕鲁服务器配置参数说明,Palworld服务器配置参数与解释:
1847 0
|
XML JSON Java
@PostMapping 必须加上@RequestBody吗
@PostMapping 必须加上@RequestBody吗
441 2
|
监控 安全 Java
美团网关读后感
文章介绍了API网关的功能,如链路追踪、监控、日志、参数校验等,并强调产品化在团队推广中的重要性。作者提出了若干疑问,包括Nginx与Web应用的长连接、Netty的再熟悉、网络架构中的IO线程理解、请求隔离的原理、安全技术、链路追踪中的线程池问题、自愈机制的精细化判断、DSL的深入学习以及Serverless和静态网站托管的理解。
149 0
|
JSON 安全 JavaScript
Java一分钟之-JSON处理:Gson与Jackson库
本文对比介绍了Java中常用的两个JSON库Gson和Jackson。Gson以其简洁易用和自动序列化/反序列化功能受到青睐,而Jackson则以优异性能和丰富功能(如字段忽略、日期格式化)著称。文中通过代码示例展示了两者的基本用法,并讨论了常见问题及解决策略,包括时间格式处理、循环引用和类型匹配。在实际应用中,应根据性能需求、安全性和版本兼容性选择合适的库,并遵循最佳实践。
436 0
|
Java API Maven
bcprov-jdk15on是什么依赖用在哪里
【6月更文挑战第11天】bcprov-jdk15on是什么依赖用在哪里
6556 3
|
Kubernetes 容器
使用kubeadm部署k8s报错:The kubelet is not running或者level=error msg="Handler for POST /v1.43/images/create returned error: Head \"https://us-west2-dock
使用kubeadm部署k8s报错:The kubelet is not running或者level=error msg="Handler for POST /v1.43/images/create returned error: Head \"https://us-west2-dock

热门文章

最新文章