打印
[C语言]

关于代码优化中模块接口封装的纠结!

[复制链接]
859|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 suxilong 于 2019-3-2 11:27 编辑

最近在优化以前一个项目的代码。这个项目中有很多模块,目前每个模块都错综复杂。
优化前定了一套规范,大致如下:
1. 模块内部尽量实现分层,底层负责从外部拿数据,中层负责处理业务逻辑,高层负责封接口给外部用
2. 模块尽量与外部隔离,只通过高层输出,底层输入
理想标准模型如下:
但实际中却遇到了非常多非常多的问题和细节,让我非常纠结~~~~希望各位大神可以指点指点!
大概目前遇到 的有以下几大类:
1. 变量外输 接口封装职责归属 问题
纠结描述: 比如模块A 变量a  如果需要被另外模块 B 调用,那么接口封装的归属A 还是归属B ?还是两边都要封?
设想处理:  ==》由模块A 封装 uint8_t  get_a(void);
                       ==》如果模块B 的mid 层需要呢? 那难道 mid 层也 include 模块A  的 app.h? 这样违背一开始定的规范?
                       ==》如果模块 B  的drv include 调用模块A 的app.h ,然后 调用 uint8_t  get_a(void); 再封一次,这样一变量要封2次接口是不是太累赘了? 如果模块B 的app.h 需要呢? 又得由mid 层再 封多一次?
                       ==》 如果这个变量a 刚好是 模块A 的mid 层 所有, 那么是不是mid 层封给 app层, app 层 在封给外部?


2. 模块内部数据的下传
纠结描述: 一开始规范定义 数据或接口最好是由下往上,但如果app 层有一个数据 uint8_t a需要被 自己的mid 层或者 drv 层调用呢?

设想处理:  ==》由mid 层  封装 一个 注册的函数  例如void reg_from_app_a(uint8_t a);然后在定义个mid层的全局变量,来获取app 层的数据
                     ===》 但是这样,到时drv 层也要, 会产生两个 不必要 全局变量。本来RAM 就不多!
                     ===》还是不管三七二十一, mid层 include app.h  drv 层include app.h , 模块内部乱成一团麻~~~~这样又有点破罐子破摔~~~
3. 头文件的包含问题
有一个头文件 typedef.h  ,里面搞了一堆 typedef unsigned char uint8_t   之类的东西。
但是偏偏  typedef unsigned int uint32_t ;   和   typedef unsigned char bool ; 这两个 导致了conflict error~~~~~
这样等于如果有函数 是bool 和uint8_t之类 返回值的,又需要在xx.h  声明, 那么xx.h 除了要包含 typedef.h 还需要 包含  stdboo.h 。。。
问题: 一般这些typedef 如何做到 不冲突 又能包含全部呢?

这些还只是**长征第一步遇到的问题~~~到了后面还不知道有多少这些问题!!!!
(这个帖子会一直更新~~~)

1.png (15.19 KB )

理想标准模块

理想标准模块

2.png (17.16 KB )

问题1

问题1

3.png (13.32 KB )

问题2

问题2

相关帖子

沙发
二九结狐六体| | 2019-3-2 12:43 | 只看该作者
,可以的啊! 不错的啊!

使用特权

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

本版积分规则

个人签名:没有最差,只有最懒

55

主题

339

帖子

4

粉丝