emWin做界面如何实现界面和业务分离?
stm32f7运行emWin做界面。由于市场需求,同一产品需要支持不同风格的界面,业务逻辑基本一样,只是界面布局贴图等不同。
比较笨的做法:将代码复制一遍,将ui部分重新设计编写,但这样需要同时维护两份代码;
目前想参考mvc等模式,做到业务和界面分离,这样一套代码做两份不同的UI界面,编译的时候选择相应的界面文件编译即可,而其它代码(业务等)只需维护一份。
但是具体到gui实现的时候,不知道如何下手了,是将界面布局单独放一个文件,事件回调函数单独提出来作为一个文件?然后回调里再调用业务函数?
qt里有信号槽机制,好像更容易实现。 界面只调用业务逻辑数据显示,要反向操作都是传消息到业务逻辑处理;界面切换用宏或者存一个参数,在UI界面管理员模式可选择界面风格 把界面元素做成一个个文件,然后项目里包含不同的文件即可 myxiaonia 发表于 2019-5-13 10:26
把界面元素做成一个个文件,然后项目里包含不同的文件即可
是说一个界面一个文件? 数据驱动。 用一个参数表示界面风格;
如果不同风格在同一个界面相差不大,同一个文件可以通过调用不同模式的界面初始化函数来切换显示;
如果界面相差较大,就分开来独立文件,通过框架和参数判断来切换新界面 #if #include 很好用的啊 等大神讲解 mcu_lover 发表于 2019-5-13 15:12
数据驱动。
大师可以再进一步提示吗 参考MVVM设计模式 GoingDown 发表于 2019-5-14 08:35
参考MVVM设计模式
看了下,前后端用的,这个要应用到嵌入式中,具体咋实施呀 显示图片按图片的文件名来显示,对齐用相对对齐方式。 落叶知秋 发表于 2019-5-13 15:28
用一个参数表示界面风格;
如果不同风格在同一个界面相差不大,同一个文件可以通过调用不同模式的界面初始 ...
忘了说了,是一台机器换个界面并重新换个外壳,作为一个新的品牌或型号进行销售(功能其实差不多)。
因为不想维护两套代码,为了减少代码的维护工作才有这个需求,想着能不能一套源代码,通过界面、业务分离或者其他手段 实现编译出两套程序。
不需要在一台机器上同时实现两套界面的切换。 zzh90513 发表于 2019-5-13 10:24
界面只调用业务逻辑数据显示,要反向操作都是传消息到业务逻辑处理;界面切换用宏或者存一个参数,在UI界面 ...
界面只调用业务逻辑数据显示可以理解,
反向操作是传消息到业务处理。这个如何理解呀 wq_601840968 发表于 2019-5-14 17:51
界面只调用业务逻辑数据显示可以理解,
反向操作是传消息到业务处理。这个如何理解呀 ...
1)用了RTOS,就是具体业务逻辑处理还是在业务源码内定义函数,界面通过发消息(消息队列,事件等),然后业务处理反馈结果;
2)每个模块或者窗口一个GUI文件,通过LCD选择界面风格就行了(emWin调用不同的窗口创建函数) wq_601840968 发表于 2019-5-14 17:48
忘了说了,是一台机器换个界面并重新换个外壳,作为一个新的品牌或型号进行销售(功能其实差不多)。
因 ...
宏定义开关加上版本管理就可以了
如果一开始界面显示和数据逻辑处理就分开了,就改起来快一点
如果没有分开,也无所谓,代码熟悉的话也改起来快点,就改改界面 落叶知秋 发表于 2019-5-15 08:59
宏定义开关加上版本管理就可以了
如果一开始界面显示和数据逻辑处理就分开了,就改起来快一点
如果没有分 ...
关键是现在界面显示和业务处理咋分开呀 zzh90513 发表于 2019-5-14 18:23
1)用了RTOS,就是具体业务逻辑处理还是在业务源码内定义函数,界面通过发消息(消息队列,事件等),然后 ...
关于第一点:“界面通过发消息(消息队列,事件等),然后业务处理反馈结果”
界面发消息给业务吗,业务收到消息后执行处理函数;
“然后业务处理反馈结果” 业务的反馈结果如何反馈给界面?
wq_601840968 发表于 2019-5-17 16:28
关于第一点:“界面通过发消息(消息队列,事件等),然后业务处理反馈结果”
界面发消息给业务吗,业务 ...
看情况啊,不等待的业务直接调用函数,需要等待的也一样用信号量或者队列传递状态; mcu_lover 发表于 2019-5-13 15:12
数据驱动。
大神说的是这个吗?
https://www.cnblogs.com/ztfjs/p/data_engine.html
看了下,我理解数据模型是界面和业务之间的桥梁,界面和业务之间不会直接耦合,不知道理解有没有问题?
另外有些疑问:
1、建立数据模型没有问题;
2、界面如果要修改数据模型,直接调用数据模型修改接口,那么业务如何能够做到立即做出反应;比如我要控制加热器,界面设定温度和开关,那么业务如何知道开始加热?
3、同样道理,业务调用数据修改接口修改了数据,界面如何能够立即刷新? zzh90513 发表于 2019-5-17 16:39
看情况啊,不等待的业务直接调用函数,需要等待的也一样用信号量或者队列传递状态; ...
对于需要等待的,gui发送完消息给业务以后 再阻塞等待业务反馈的信号? 数据业务和界面密不可分,分开更麻烦 听取大神的意见 MVC设计模式,软件工程中基本的软件架构,读书加实践 上面大佬都已经回答了,mvvc设计模式,简单点,数据驱动,ui模块成对象,按情况加载
页:
[1]