打印

【转】嵌入式软件架构模式

[复制链接]
5860|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
https://mp.weixin.qq.com/s/sqf9T_Lj1Etb3gm3a3fnFg


嵌入式软件因为硬件资源限制,可能存在驱动与应用耦合的情况,但对于大型项目,资源充裕的情况下,复杂的业务逻辑、后续扩展维护的需要,必须采用分层和模块化思维,这思想就是架构模式。一般分7种架构模式:
    ① 分层架构
    ② 多层架构
    ③ 管道 - 过滤器架构
    ④ 客户端 - 服务器架构
    ⑤ 模型 - 视图 - 控制器架构
    ⑥ 事件驱动架构
    ⑦ 微服务架构
   其中加粗部分属于个人觉得适合在嵌入式系统应用的架构(模式),实际开发中一般是多种模式嵌套,确保软件隔离解耦。

使用特权

评论回复
沙发
沉浮的茶叶|  楼主 | 2022-5-7 16:13 | 只看该作者
一、分层架构模式
最常见的架构模式就是分层架构,大部分分层架构主要由四层组成:展现层、业务层、持久层和数据库层,如下图所示:



使用特权

评论回复
板凳
沉浮的茶叶|  楼主 | 2022-5-7 16:14 | 只看该作者
1、上下文
复杂的系统都会经历独立的发展和衍化系统各个部分的需要。出于这个原因,系统开发者需要对关注点进行清晰且条理分明的分离,以便系统的各个模块可以独立地开发和维护。

使用特权

评论回复
地板
沉浮的茶叶|  楼主 | 2022-5-7 16:15 | 只看该作者
2、问题
软件需要以这样一种方式分割:各个模块可以独自开发和衍化,各自部分之间的交互非常少,支持可移植性、可修改性和复用性。

使用特权

评论回复
5
沉浮的茶叶|  楼主 | 2022-5-7 16:15 | 只看该作者
3、方案
为了实现关注点分离,分层模式将软件分割成各个单元(称为“层”)。每一层都是一组模块,提供了一组高内聚的服务。其使用必须是单向的。层将一组软件作为一个完整的分区,每个分区暴露一个公开接口。
    ✪ 第一个概念是,每一层都有特定的角色和职责。例如,展现层负责处理所有的用户界面。分层架构的这种关注点分离,让构建高效的角色和职责非常简单。
    ✪ 第二个概念是,分层架构模式是一个技术性的分区架构,而非一个领域性的分区架构。它们是由组件组成的,而不是领域。
    ✪ 最后一个概念是,分层架构中的每一层都被标记为封闭或者开放。封闭层意味着请求从一层移到另一层,它必须通过它正下面的这一层才能达到下面这一层的再下一层。请求不能跳过任何层。


使用特权

评论回复
6
沉浮的茶叶|  楼主 | 2022-5-7 16:16 | 只看该作者
4、弱点
分层会导致性能下降。这种模式不适合高性能应用程序,因为经过架构中的多层来实现一个业务请求的效率是不高的。还会增加系统的前期成本和复杂性。


使用特权

评论回复
7
沉浮的茶叶|  楼主 | 2022-5-7 16:17 | 只看该作者
5、用途
我们应该将这种方式应用于小型简单的应用程序。
  • 点评

原文是针对互联网软件,对于嵌入式可以分为业务层、公共组件层、系统适配层、硬件驱动层。软件分层思想是个基础概念,也许在嵌入式软件中体现不明显,是因为硬件资源限制有所取舍。


使用特权

评论回复
8
沉浮的茶叶|  楼主 | 2022-5-7 16:18 | 只看该作者
二、多层模式
方案:

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

使用特权

评论回复
9
沉浮的茶叶|  楼主 | 2022-5-7 16:19 | 只看该作者
1、上下文
在一个分布式部署中,通常需要将系统的基础设施分到不同的子集中。

使用特权

评论回复
10
沉浮的茶叶|  楼主 | 2022-5-7 16:20 | 只看该作者
2、问题
我们如何将系统分割到多个计算上独立的执行结构:由一些通信媒介连接的软件和硬件组?

使用特权

评论回复
11
沉浮的茶叶|  楼主 | 2022-5-7 16:21 | 只看该作者
3、弱点
大量前期成本和复杂性。
4、用途
用在分布式系统中。
  • 点评

个人能力限制,暂不明白在嵌入式软件中的用法和使用范围。

使用特权

评论回复
12
沉浮的茶叶|  楼主 | 2022-5-7 16:22 | 只看该作者
三、管道-过滤器架构
软件架构中反复出现的一种模式是管道 - 过滤器(pipe-filter)模式。

使用特权

评论回复
13
沉浮的茶叶|  楼主 | 2022-5-7 16:22 | 只看该作者
1、上下文
许多系统需要转换从输入到输出的离散数据流。许多类型转换在实践中重复出现,因此将其创建成独立的可复用的部分,这是比较理想的。

使用特权

评论回复
14
沉浮的茶叶|  楼主 | 2022-5-7 16:23 | 只看该作者
2、问题
这些系统需要被分割成可复用的松耦合的组件,组件之间拥有简单通用的交互机制。这样它们就可以灵活地相互结合。这些通用松耦合的组件就很容易复用。独立的组件可以并行执行。

使用特权

评论回复
15
沉浮的茶叶|  楼主 | 2022-5-7 16:25 | 只看该作者
3、方案
这种架构中的管道构成了过滤器之间的通信通道。第一个概念是,由于性能原因,每个管道都是非定向的和点对点的,接受来自一个源的输入并经常直接输出到另外一个源。
在这种模式中,有如下四种过滤器。
    ✪ producer(source):一个过程的起点。
    ✪ transformer (map):对一些或所有数据进行转换。
    ✪ tester (reduce):测试一个或多个条件。
    ✪ consumer (sink):终点。

使用特权

评论回复
16
沉浮的茶叶|  楼主 | 2022-5-7 16:26 | 只看该作者
4、弱点
不太适合交互性的系统,因为它们的转换特性。
过多的解析和反解析会导致性能损失,也会增加编写过滤器本身的复杂性。

使用特权

评论回复
17
沉浮的茶叶|  楼主 | 2022-5-7 16:26 | 只看该作者
5、用途
管道 - 过滤器架构用于各种应用程序,特别是简化单项处理的任务。
  • 点评

看起来比较类似广播与接收的模式,在无操作系统消息队列机制,基于单片机裸机开发时可以使用,所有分时任务共享一个广播队列,接收时选择自身感兴趣的进行处理,或者对广播消息进行删除截断后续操作。

使用特权

评论回复
18
沉浮的茶叶|  楼主 | 2022-5-7 16:27 | 只看该作者
四、客户端-过滤器架构
1、上下文
有许多共享资源和服务是大量分布式的客户端希望访问的,希望控制访问或服务质量。


使用特权

评论回复
19
沉浮的茶叶|  楼主 | 2022-5-7 16:28 | 只看该作者
2、问题
通过管理一组共享资源和服务,我们可以通过分解公共服务并在单个位置或少数位置进行修改来提高可修改性和复用性。我们想要通过在将资源本身分布在多个物理服务器上的同时集中控制这些资源和服务,来提高可伸缩性和可用性。

使用特权

评论回复
20
沉浮的茶叶|  楼主 | 2022-5-7 16:29 | 只看该作者
3、方案
在客户端 - 服务器模式中,组件和连接器具有特定的行为。
称为“客户端”的组件将请求发送到称为“服务器”的组件,然后等待回复。
服务器组件接收到客户端的请求并向其发送回复。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

79

帖子

0

粉丝