cJSON解析数据如何避免过多if-else,实现解耦
2024-09-30 15:12:40
代码展示:
数据接收函数内,解析cJSON数据时,一不小心就会冒出来一大堆if语句在一个函数内,后续想要新增网络功能时,必然又会导致需要在mqtt订阅函数内去新增部分代码,实现解析新的报文。
这显然耦合性很强。
解耦实现要求至少以新增函数的方式来增加业务功能,而非直接在原来的函数内部去进行新增或修改。
那么如何避免在解析cJSON时一个函数内出现过多的if语句呢?
先来思考,出现很多if语句,说明我们的cJSON格式的报文有很多的同级对象,不同的对象对应不同的业务,
所以我们应该以业务来进行划分,尽量将不同的数据解析划分到对应的业务代码模块中去。
而不是全部都放在一块,那样自然显得拥挤和不完美。
上图的方式是事先注册好根对象内的第一级别的下级对象,然后解析时遍历取出这些对象名,在收到的cJSON数据中去进行匹配,如果匹配上了,则进行后续的该对象的值处理。
如果没匹配上(cJSON_GetObjectItem函数返回NUILL),则继续尝试匹配下一个对象名看是否需要进行值处理。
注册-取出的思维在编程中很常用,这也是设计模式中观察者模式的一个运用。
.
最新文章
- 编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间。
- mysql 主从复制 实践
- Altiium Designer 09 解决局域网冲突的办法(转载)
- xml版本学生管理系统
- [Javascript + lodash] sortBy and sortedIndex
- 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
- Mapper XML Files详解
- Session、Application、Cache
- 更新sdk
- Mysql(集群)业务水平切割 垂直切割(Amoeba)
- 导入礼包时,遇到file_get_contents读取的文本,去除空格、换行等的方法
- 程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上。刚进CSDN的博客看到这么句话
- kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition
- 排序算法(Java实现)
- 享元模式 FlyWeight 结构型 设计模式(十五)
- linux下安装多个Tomcat
- 软件测试实验二----selenium、katalon、junit
- prometheus监控示例
- sql 查询语句的练习2
- vue学习(1)
热门文章
- 一起来聊聊 IP 地址、局域网、广域网、IPV4 和 IPV6
- SQL server中自定义排序
- 最强阿里巴巴历年经典面试题汇总:C++研发岗
- 24、配置Oracle下sqlplus历史命令的回调功能
- 使用Flash Builder 4.6出现 新建配置 失败 java.lang.NullPointerException错误
- 『无为则无心』Python序列 — 23、Python序列的公共API
- 学堂在线《Java程序设计(2021春)》系列笔记——前言
- 用swoole实现异步任务队列
- FastTunnel-内网穿透原理揭秘
- 卧槽,原来不需要FQ就可以构建海外镜像