cJSON解析数据如何避免过多if-else,实现解耦

代码展示:

cJSON解析数据如何避免过多if-else,实现解耦

 

 

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

这显然耦合性很强。

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


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

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

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

 

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

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

 

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

 

 

 

.

上一篇:Android 10 根文件系统和编译系统(十一):Android.mk编译静态库


下一篇:优秀开源C++项目