嵌入式技术论坛
直播中

李玲

8年用户 1320经验值
私信 关注
[经验]

如何避免在解析cJSON时一个函数内出现过多的if语句呢?

1.jpg

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

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

那么如何避免在解析cJSON时一个函数内出现过多的if语句呢?

先来思考,出现很多if语句,说明我们的cJSON格式的报文有很多的同级对象,不同的对象对应不同的业务,所以我们应该以业务来进行划分,尽量将不同的数据解析划分到对应的业务代码模块中去。而不是全部都放在一块,那样自然显得拥挤和不完美。

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

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

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

原作者:大话西游2018

更多回帖

发帖
×
20
完善资料,
赚取积分