【DIY数字仪表】使用TouchGFX的MVP架构来实现GUI和硬件的双向交互(2)

原创
2020/07/27 07:00
阅读数 2.7K
关注、星标公众号 ,直达精彩内容

者:KK

上期回顾:(点此连接跳转),上期介绍了如何将TouchGFX移植到rtthread操作系统。
本期将简单介绍一下TouchGFX的MVP架构使用方法。


演示视频:

1.如何理解TouchGFX中Screen的MVP架构

MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部。
用一句话来概括MVP:所有数据仅能保存在称为 Model 的类对象(简单说就是一种文件)中,Presenter是视图(View)与Model之间的纽带,View只能通过Presenter来读取数据。
   MVP优点:

  • 模型与视图完全分离,我们可以修改视图而不影响模型;

  • 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;

  • 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化事件总是比模型的变化频繁;

  • 如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

Screen概念
在TouchGFX应用程序中,开发者可以根据项目需要创建任意数量的Screen。这里的Screen是指UI元素及其相关的业务逻辑。一个Screen通常包括两个内容:一个View,涵盖该Screen上显示的所有空间;一个Presenter,涵盖该Screen上所有的业务逻辑。
TouchGFX有自己的内存分配方案,它仅分配给最大的View和最大的Presenter,分配的RAM可以在应用程序的所有Screen上重用。
Model
Model类是一个单例,始终处于活动状态,并具有两个目的:

  1. 存储UI的状态信息。切换Screen时,View和Presenter被释放,因此它们不能用于存储应在Screen切换期间保留的信息。所有,需要Model来存储UI的状态信息。

  2. 充当与后端系统的接口,在当前活动Screen之间来回传递事件。
    Model类有一个自动设置指向当前活动Presenter的指针。当Model中发生更改时,会将更改通知给当前活动的Presenter。这是通过应用程序的Model Listener接口中的方法实现的。

View
View类(或者更具体地说,是从TouchGFX View类派生的用户定义类)包含在当前Screen显示的所有控件。他还包含一个setScreen和一个tearDownScreen函数,当进入、退出当前Screen时,该函数会自动调用。通常,可以在setupScreen函数中设置控件。
View还包含了一个可以指向关联的Presenter的指针。该指针由框架自动设置。使用此指针,你可以将UI事件传递给Presenter。
Presenter
Presenter类(也是从TouchGFX Presenter类派生的用户定义类)负责当前活动Screen的业务逻辑。它将接收来自Model的“后端”事件,以及来自View的UI事件,并决定采取哪种操作。
小结
在MVP架构中,所有数据只能保持在Model的类对象中,Presenter是View与Model之间的纽带,View只能通过Presenter来读取数据,而不能直接读取Model中的数据。

2.使用TouchGFX MVP来实现UI和硬件的双向交互

Model-View-Presenter 软件架构:

2.1 用户通过UI按键控制硬件LED

使用TouchGFXDesigner设计界面,添加toggleButton按钮


利用MVP架构填写代码:

2.2 把CPU使用率参数传递给UI显示

使用TouchGFXDesigner制作cpu实用率的自定义控件,然后将这个控件添加到需要的界面


cpu的使用率算法可以直接在rtthread的github中rt-thread\examples\kernel文件下找到,具体实现原理网上有很多分析的文章,这里就不再分析了。
下边直接把CPU的使用率参数通过Model层发送给Screen。


代码开源地址:https://gitee.com/Aladdin-Wang/hellotouchGFX


“在看”的小可爱永远十八岁!
往期 精彩回顾




【DIY数字仪表】STM32F429移植TouchGFX到RT-Thread系统(1)
制作STM32F429的SPI FLASH下载算法
STM32通用Bootloader——FOTA
零代码玩转OTA升级


关注微信公众号【AIoT开源项目项目分享】,发送加群”,加入技术交流群。


如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我们最大的动力。喜欢就请关注我们吧~

长按二维码

关注我们


如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我最大的动力。喜欢就请关注我吧~

长按二维码

关注我们

本文分享自微信公众号 - AIoT开源项目分享(Aladdin-Wang)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部