[C语言] 关于代码优化中模块接口封装的纠结!

[复制链接]
1069|1
 楼主| suxilong 发表于 2019-3-2 11:23 | 显示全部楼层 |阅读模式
本帖最后由 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 如何做到 不冲突 又能包含全部呢?

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
二九结狐六体 发表于 2019-3-2 12:43 | 显示全部楼层
,可以的啊! 不错的啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

55

主题

340

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部