打印

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

[复制链接]
楼主: 沉浮的茶叶
手机看帖
扫描二维码
随时随地手机跟帖
21
沉浮的茶叶|  楼主 | 2022-5-7 16:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
4、弱点
服务器会成为性能瓶颈和单点故障位置。在系统建成后,关于功能位置(在客户端还是在服务器)的决策通常是复杂的而且变动成本很大。

使用特权

评论回复
22
沉浮的茶叶|  楼主 | 2022-5-7 16:30 | 只看该作者
5、用途
对于有许多组件(客户端)发送请求到另外一些提供服务的组件(服务器)的系统,我们可以使用客户端 - 服务器模式来建模这个系统的一部分:在线应用程序,例如电子邮件、共享文档或银行服务。
  • 点评

这个好像只适合互联网软件。


使用特权

评论回复
23
沉浮的茶叶|  楼主 | 2022-5-7 16:31 | 只看该作者
五、模型-视图-控制器架构(MVC)
1、上下文
用户界面通常是一个交互性应用程序的最频繁被修改的部分。用户通常希望从不同的视角查看数据,例如柱状图或者饼图。这些表示形式都应该反映数据当前的状态。


使用特权

评论回复
24
沉浮的茶叶|  楼主 | 2022-5-7 16:32 | 只看该作者
2、问题
用户界面功能如何独立于应用程序功能,同时还还对用户输入或底层应用程序数据的更改做出响应?
当底层应用程序数据更改时,如何创建、维护和协调用户界面的多个视图?

使用特权

评论回复
25
沉浮的茶叶|  楼主 | 2022-5-7 16:32 | 只看该作者
3、方案
模型 - 视图 - 控制器(model-view-controller,即 MVC)模式将应用程序功能分为以下三种类型的组件:
    ✪ 模型,包含应用程序的数据。
    ✪ 视图,显示部分底层数据并与用户交互。
    ✪ 控制器,在模型和视图之间进行中介并管理状态更改的通知。

使用特权

评论回复
26
沉浮的茶叶|  楼主 | 2022-5-7 16:33 | 只看该作者
4、弱点
对于简单的用户界面,其复杂性并不值得这么做。
模型、视图和控制器抽象可能不适用于某些用户界面工具包。

使用特权

评论回复
27
沉浮的茶叶|  楼主 | 2022-5-7 16:34 | 只看该作者
5、用途
MVC 是网站或移动应用程序开发用户界面常用的一种架构模式。
  • 点评

这模式一般用在支持显示的场景,底层对数据的维护管理,与界面显示分离,这样当业务需求、显示部分变更对底层基础影响较小,似乎是软件分层模式的特例。

使用特权

评论回复
28
沉浮的茶叶|  楼主 | 2022-5-7 16:34 | 只看该作者
六、事件驱动架构
1、上下文
需要提供计算和信息资源来处理传入的应用程序生成的独立异步事件,这种方式可以随着需求的增加而扩展。

使用特权

评论回复
29
沉浮的茶叶|  楼主 | 2022-5-7 16:35 | 只看该作者
2、问题
构建分布式系统,这个系统可以服务异步到达的事件相关信息,并且能从简单小型扩展到复杂大型。

使用特权

评论回复
30
沉浮的茶叶|  楼主 | 2022-5-7 16:35 | 只看该作者
3、方案

为事件处理部署独立的事件进程或处理器。到达的事件进入队列。调度程序根据调度策略从队列中拉取事件并将它们分配到合适的事件处理器。

使用特权

评论回复
31
沉浮的茶叶|  楼主 | 2022-5-7 16:36 | 只看该作者
4、弱点
性能和错误恢复可能是问题。
5、用途
使用这个方案的电商应用程序将工作如下:
Order Service 创建一个 Order,这个订单处于待定状态,然后发布一个OrderCreated事件。
    ✪ Customer Service 接收到这个事件并尝试为这个 Order 扣除信用。然后发布一个 Credit Reserved 事件或者CreditLimitExceeded(超出信用限额)事件。
    ✪ Order Service 接收到 Customer Service 发送的事件并将订单状态更改为已核准或已取消。
  • 点评

这个在嵌入式软件很容易理解,所谓事件就是硬件检测到中断信息。嵌入式软件基本都有体现这个思想,一个while死循环,等待事件触发,比如外部按键中断、串口接收中断、或者内部定时器超时中断等。这种框架有益于外设扩展,理论上互不干扰。

使用特权

评论回复
32
沉浮的茶叶|  楼主 | 2022-5-7 16:37 | 只看该作者
七、微服务架构
1、上下文
部署基于服务器的企业应用程序,支持各种浏览器和原生移动客户端。应用程序通过执行业务逻辑、访问数据库、与其它系统交换信息并返回响应来处理客户端请求。这个应用程序可能会暴露一个第三方 API。

使用特权

评论回复
33
沉浮的茶叶|  楼主 | 2022-5-7 16:38 | 只看该作者
2、问题
一体化应用程序会变得过于庞大和复杂,无法得到有效支持和部署来实现最优的分布式资源利用,例如在云环境中。

使用特权

评论回复
34
沉浮的茶叶|  楼主 | 2022-5-7 16:38 | 只看该作者
3、方案

将应用程序构建成服务套件。每个服务都是独立部署和可扩展的,拥有自己的 API 边界。不同的服务可以用不同的编程语言编写,管理它们自己的数据库,由不同的团队开发。

使用特权

评论回复
35
沉浮的茶叶|  楼主 | 2022-5-7 16:39 | 只看该作者
4、弱点
系统设计必须能容忍服务失败,需要更多的系统监控。服务编排和事件协作开销比较大。

使用特权

评论回复
36
沉浮的茶叶|  楼主 | 2022-5-7 16:40 | 只看该作者
5、用途
许多使用场景都可以应用微服务架构,特别是那些涉及大量数据管道的场景。例如,一个微服务系统对关于一个公司的零售店销售的报表系统会比较理想。数据展现过程的每一步都会被一个微服务处理:数据收集、清理、规范化、浓缩、聚合、报告等。
  • 点评

在嵌入式软件开发中,比较适合某个相对独立的功能,在适配其基础接口后,将一个复杂功能模块化,外部输入参数,模块内部执行,结束后输出结果或者触发回调,该功能对外接口简单,外部无需过多关注内部实现,便于软件解耦和维护。

<转自网文,结合嵌入式软件做了适当解读>

使用特权

评论回复
37
tpgf| | 2022-6-5 11:17 | 只看该作者
软件指的是上位机的软件是吗

使用特权

评论回复
38
磨砂| | 2022-6-5 12:15 | 只看该作者
这么多种类的架构啊

使用特权

评论回复
39
晓伍| | 2022-6-5 12:25 | 只看该作者
得多大的项目用啊

使用特权

评论回复
40
八层楼| | 2022-6-5 12:36 | 只看该作者
还需要多人协作吗

使用特权

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

本版积分规则