代码展示:

数据接收函数内,解析cJSON数据时,一不小心就会冒出来一大堆if语句在一个函数内,后续想要新增网络功能时,必然又会导致需要在mqtt订阅函数内去新增部分代码,实现解析新的报文。

这显然耦合性很强。

解耦实现要求至少以新增函数的方式来增加业务功能,而非直接在原来的函数内部去进行新增或修改。

那么如何避免在解析cJSON时一个函数内出现过多的if语句呢?
先来思考,出现很多if语句,说明我们的cJSON格式的报文有很多的同级对象,不同的对象对应不同的业务,

所以我们应该以业务来进行划分,尽量将不同的数据解析划分到对应的业务代码模块中去。

而不是全部都放在一块,那样自然显得拥挤和不完美。

上图的方式是事先注册好根对象内的第一级别的下级对象,然后解析时遍历取出这些对象名,在收到的cJSON数据中去进行匹配,如果匹配上了,则进行后续的该对象的值处理。

如果没匹配上(cJSON_GetObjectItem函数返回NUILL),则继续尝试匹配下一个对象名看是否需要进行值处理。

注册-取出的思维在编程中很常用,这也是设计模式中观察者模式的一个运用。

.

最新文章

  1. 编写Java应用程序。首先,定义一个时钟类——Clock,它包括三个int型 成员变量分别表示时、分、秒,一个构造方法用于对三个成员变量(时、分、秒) 进行初始化,还有一个成员方法show()用于显示时钟对象的时间。其次,再定义 一个主类——TestClass,在主类的main方法中创建多个时钟类的对象,使用这 些对象调用方法show()来显示时钟的时间。
  2. mysql 主从复制 实践
  3. Altiium Designer 09 解决局域网冲突的办法(转载)
  4. xml版本学生管理系统
  5. [Javascript + lodash] sortBy and sortedIndex
  6. 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
  7. Mapper XML Files详解
  8. Session、Application、Cache
  9. 更新sdk
  10. Mysql(集群)业务水平切割 垂直切割(Amoeba)
  11. 导入礼包时,遇到file_get_contents读取的文本,去除空格、换行等的方法
  12. 程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上。刚进CSDN的博客看到这么句话
  13. kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition
  14. 排序算法(Java实现)
  15. 享元模式 FlyWeight 结构型 设计模式(十五)
  16. linux下安装多个Tomcat
  17. 软件测试实验二----selenium、katalon、junit
  18. prometheus监控示例
  19. sql 查询语句的练习2
  20. vue学习(1)

热门文章

  1. 一起来聊聊 IP 地址、局域网、广域网、IPV4 和 IPV6
  2. SQL server中自定义排序
  3. 最强阿里巴巴历年经典面试题汇总:C++研发岗
  4. 24、配置Oracle下sqlplus历史命令的回调功能
  5. 使用Flash Builder 4.6出现 新建配置 失败 java.lang.NullPointerException错误
  6. 『无为则无心』Python序列 — 23、Python序列的公共API
  7. 学堂在线《Java程序设计(2021春)》系列笔记——前言
  8. 用swoole实现异步任务队列
  9. FastTunnel-内网穿透原理揭秘
  10. 卧槽,原来不需要FQ就可以构建海外镜像