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

代码展示:

 

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

这显然耦合性很强。

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


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

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

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

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

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

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

.

/************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/15093985.html