找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2161

积分

0

好友

303

主题
发表于 2025-11-28 01:57:56 | 查看: 44| 回复: 0

在嵌入式系统开发中,由于硬件资源限制,驱动层与应用层常常存在紧密耦合的情况。然而,对于大型项目,在资源允许的条件下,为了处理复杂的业务逻辑并确保系统的可扩展性和可维护性,采用分层和模块化的架构思维至关重要。

常见的嵌入式软件架构模式主要包括以下几种:

① 分层架构
② 多层架构
③ 管道-过滤器架构
④ 客户端-服务器架构
⑤ 模型-视图-控制器架构
⑥ 事件驱动架构
⑦ 微服务架构

分层架构模式

分层架构是最常见的架构模式之一,通常由展现层、业务层、持久层和数据库层四部分组成,具体结构如下图所示:

图片

上下文
复杂系统往往需要各个部分独立发展和演化。因此,开发者必须实现关注点的清晰分离,以便各模块能够独立开发与维护。

核心问题
软件需要被分割成多个模块,每个模块可以独立开发和演进,模块间交互尽可能少,以支持可移植性、可修改性和复用性。

解决方案
分层模式通过将软件划分为不同的层来实现关注点分离。每一层都是一组高内聚的模块,提供特定的服务,并且层之间的调用必须是单向的。

  • 角色与职责:每一层都有明确的角色,例如展现层负责用户界面处理。这种分离使得构建高效的职责分配变得简单。
  • 技术分区:分层架构是一种技术性分区,而非领域性分区,由组件而非业务领域构成。
  • 封闭与开放层:在封闭层中,请求必须逐层传递,不能跳过任何中间层。

图片

潜在弱点
分层可能导致性能下降,不适合高性能应用,因为业务请求需要经过多层处理。此外,它会增加系统前期成本和复杂性。

适用场景
适用于小型或简单的应用程序。

多层架构模式

图片

许多系统的执行结构被组织成一系列逻辑组件分组,每个分组称为一个层。

上下文
在分布式部署中,通常需要将系统基础设施分配到不同的子集中。

核心问题
如何将系统分割成多个计算上独立的执行结构,这些结构由通信媒介连接的软件和硬件组组成?

潜在弱点
前期成本和复杂性较高。

适用场景
主要用于分布式系统。

管道-过滤器架构

管道-过滤器模式在软件架构中反复出现,适用于数据流转换场景。

图片

上下文
许多系统需要处理从输入到输出的离散数据流,常见转换类型适合创建为独立可复用组件。

核心问题
系统需要被分割成松耦合的可复用组件,组件间交互简单通用,以支持灵活组合和并行执行。

解决方案
管道构成过滤器之间的通信通道,通常是非定向和点对点的。过滤器类型包括:

  • 生产者:数据流的起点。
  • 转换器:对数据进行转换。
  • 测试器:测试条件。
  • 消费者:数据流的终点。

潜在弱点
不适合交互性系统,过多的解析和反解析会导致性能损失,并增加过滤器编写的复杂性。

适用场景
适用于简化单项处理任务的各种应用程序。

客户端-服务器架构

图片

上下文
大量分布式客户端需要访问共享资源和服务,同时要求控制访问质量。

核心问题
通过集中管理共享服务,提高可修改性和复用性,同时通过分布式资源部署提升可伸缩性和可用性。

解决方案
客户端组件向服务器组件发送请求并等待回复,服务器接收请求后返回响应。

潜在弱点
服务器可能成为性能瓶颈和单点故障点,功能位置的决策复杂且变动成本高。

适用场景
适用于在线应用程序,如电子邮件、共享文档或银行服务。

模型-视图-控制器架构(MVC)

图片

上下文
用户界面是交互应用程序中最常修改的部分,用户需要从不同视角查看数据,且视图应实时反映数据状态。

核心问题
如何使用户界面功能独立于应用程序功能,同时响应用户输入或底层数据更改?如何协调多个视图以反映数据变化?

解决方案
MVC模式将应用程序功能分为三种组件:

  • 模型:包含应用程序数据。
  • 视图:显示部分数据并与用户交互。
  • 控制器:在模型和视图之间中介,管理状态更改通知。

潜在弱点
对于简单用户界面,复杂性不值得;某些工具包可能不适用这些抽象。

适用场景
广泛用于网站或移动应用程序的用户界面开发。

事件驱动架构

上下文
需要处理异步到达的事件,并支持从简单到复杂的扩展。

核心问题
如何构建分布式系统,以服务异步事件并实现可扩展性?

解决方案
图片

部署独立的事件处理器,事件进入队列后由调度程序根据策略分配到合适处理器。

潜在弱点
可能存在性能和错误恢复问题。

适用场景
例如在电商应用中:订单服务创建订单并发布事件,客户服务处理信用检查并发布响应事件。

微服务架构

上下文
企业应用程序需要支持多种客户端,处理业务逻辑、数据库访问和系统交互。

核心问题
一体化应用程序过于庞大复杂,难以在分布式环境(如云平台)中有效支持和部署。

解决方案
图片

将应用程序构建为独立部署和扩展的服务套件,每个服务拥有自己的API边界,可能使用不同编程语言和数据库,由不同团队开发。

潜在弱点
系统需容忍服务失败,监控要求高,服务编排和事件协作开销大。

适用场景
适用于大量数据管道场景,可在云原生环境中高效部署。




上一篇:Java Lambda集合操作优化实战:从低效遍历到高效处理进阶
下一篇:快速掌握 Docker:前端开发者也能轻松玩转容器化
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-12 02:46 , Processed in 0.207456 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表