wq_601840968 发表于 2019-5-13 10:05:06

emWin做界面如何实现界面和业务分离?

stm32f7运行emWin做界面。
由于市场需求,同一产品需要支持不同风格的界面,业务逻辑基本一样,只是界面布局贴图等不同。

比较笨的做法:将代码复制一遍,将ui部分重新设计编写,但这样需要同时维护两份代码;
目前想参考mvc等模式,做到业务和界面分离,这样一套代码做两份不同的UI界面,编译的时候选择相应的界面文件编译即可,而其它代码(业务等)只需维护一份。

但是具体到gui实现的时候,不知道如何下手了,是将界面布局单独放一个文件,事件回调函数单独提出来作为一个文件?然后回调里再调用业务函数?
qt里有信号槽机制,好像更容易实现。

zzh90513 发表于 2019-5-13 10:24:46

界面只调用业务逻辑数据显示,要反向操作都是传消息到业务逻辑处理;界面切换用宏或者存一个参数,在UI界面管理员模式可选择界面风格

myxiaonia 发表于 2019-5-13 10:26:27

把界面元素做成一个个文件,然后项目里包含不同的文件即可

wq_601840968 发表于 2019-5-13 14:35:29

myxiaonia 发表于 2019-5-13 10:26
把界面元素做成一个个文件,然后项目里包含不同的文件即可

是说一个界面一个文件?

mcu_lover 发表于 2019-5-13 15:12:01

数据驱动。

落叶知秋 发表于 2019-5-13 15:28:08

用一个参数表示界面风格;
如果不同风格在同一个界面相差不大,同一个文件可以通过调用不同模式的界面初始化函数来切换显示;
如果界面相差较大,就分开来独立文件,通过框架和参数判断来切换新界面

leiyitan 发表于 2019-5-13 20:01:39

#if #include 很好用的啊

huangqi412 发表于 2019-5-13 21:20:03

等大神讲解

hellowolf 发表于 2019-5-13 22:54:58

mcu_lover 发表于 2019-5-13 15:12
数据驱动。

大师可以再进一步提示吗

GoingDown 发表于 2019-5-14 08:35:51

参考MVVM设计模式

wq_601840968 发表于 2019-5-14 14:54:20

GoingDown 发表于 2019-5-14 08:35
参考MVVM设计模式

看了下,前后端用的,这个要应用到嵌入式中,具体咋实施呀

czg1411 发表于 2019-5-14 16:26:21

显示图片按图片的文件名来显示,对齐用相对对齐方式。

wq_601840968 发表于 2019-5-14 17:48:50

落叶知秋 发表于 2019-5-13 15:28
用一个参数表示界面风格;
如果不同风格在同一个界面相差不大,同一个文件可以通过调用不同模式的界面初始 ...

忘了说了,是一台机器换个界面并重新换个外壳,作为一个新的品牌或型号进行销售(功能其实差不多)。
因为不想维护两套代码,为了减少代码的维护工作才有这个需求,想着能不能一套源代码,通过界面、业务分离或者其他手段 实现编译出两套程序。
不需要在一台机器上同时实现两套界面的切换。

wq_601840968 发表于 2019-5-14 17:51:25

zzh90513 发表于 2019-5-13 10:24
界面只调用业务逻辑数据显示,要反向操作都是传消息到业务逻辑处理;界面切换用宏或者存一个参数,在UI界面 ...

界面只调用业务逻辑数据显示可以理解,
反向操作是传消息到业务处理。这个如何理解呀

zzh90513 发表于 2019-5-14 18:23:08

wq_601840968 发表于 2019-5-14 17:51
界面只调用业务逻辑数据显示可以理解,
反向操作是传消息到业务处理。这个如何理解呀 ...

1)用了RTOS,就是具体业务逻辑处理还是在业务源码内定义函数,界面通过发消息(消息队列,事件等),然后业务处理反馈结果;
2)每个模块或者窗口一个GUI文件,通过LCD选择界面风格就行了(emWin调用不同的窗口创建函数)

落叶知秋 发表于 2019-5-15 08:59:36

wq_601840968 发表于 2019-5-14 17:48
忘了说了,是一台机器换个界面并重新换个外壳,作为一个新的品牌或型号进行销售(功能其实差不多)。
因 ...

宏定义开关加上版本管理就可以了
如果一开始界面显示和数据逻辑处理就分开了,就改起来快一点
如果没有分开,也无所谓,代码熟悉的话也改起来快点,就改改界面

wq_601840968 发表于 2019-5-17 16:24:28

落叶知秋 发表于 2019-5-15 08:59
宏定义开关加上版本管理就可以了
如果一开始界面显示和数据逻辑处理就分开了,就改起来快一点
如果没有分 ...

关键是现在界面显示和业务处理咋分开呀

wq_601840968 发表于 2019-5-17 16:28:31

zzh90513 发表于 2019-5-14 18:23
1)用了RTOS,就是具体业务逻辑处理还是在业务源码内定义函数,界面通过发消息(消息队列,事件等),然后 ...

关于第一点:“界面通过发消息(消息队列,事件等),然后业务处理反馈结果”
界面发消息给业务吗,业务收到消息后执行处理函数;
“然后业务处理反馈结果” 业务的反馈结果如何反馈给界面?

zzh90513 发表于 2019-5-17 16:39:48

wq_601840968 发表于 2019-5-17 16:28
关于第一点:“界面通过发消息(消息队列,事件等),然后业务处理反馈结果”
界面发消息给业务吗,业务 ...

看情况啊,不等待的业务直接调用函数,需要等待的也一样用信号量或者队列传递状态;

wq_601840968 发表于 2019-5-17 16:47:36

mcu_lover 发表于 2019-5-13 15:12
数据驱动。

大神说的是这个吗?
https://www.cnblogs.com/ztfjs/p/data_engine.html

看了下,我理解数据模型是界面和业务之间的桥梁,界面和业务之间不会直接耦合,不知道理解有没有问题?

另外有些疑问:
1、建立数据模型没有问题;
2、界面如果要修改数据模型,直接调用数据模型修改接口,那么业务如何能够做到立即做出反应;比如我要控制加热器,界面设定温度和开关,那么业务如何知道开始加热?
3、同样道理,业务调用数据修改接口修改了数据,界面如何能够立即刷新?

wq_601840968 发表于 2019-5-17 16:52:04

zzh90513 发表于 2019-5-17 16:39
看情况啊,不等待的业务直接调用函数,需要等待的也一样用信号量或者队列传递状态; ...

对于需要等待的,gui发送完消息给业务以后 再阻塞等待业务反馈的信号?

R8C 发表于 2020-3-14 22:46:59

数据业务和界面密不可分,分开更麻烦

Feco 发表于 2020-3-15 08:04:42

听取大神的意见

GameOfThrone 发表于 2020-3-15 11:53:50

MVC设计模式,软件工程中基本的软件架构,读书加实践

slzm40 发表于 2020-3-15 19:31:16

上面大佬都已经回答了,mvvc设计模式,简单点,数据驱动,ui模块成对象,按情况加载
页: [1]
查看完整版本: emWin做界面如何实现界面和业务分离?