代码展示:
数据接收函数内,解析cJSON数据时,一不小心就会冒出来一大堆if语句在一个函数内,后续想要新增网络功能时,必然又会导致需要在mqtt订阅函数内去新增部分代码,实现解析新的报文。
这显然耦合性很强。
解耦实现要求至少以新增函数的方式来增加业务功能,而非直接在原来的函数内部去进行新增或修改。
那么如何避免在解析cJSON时一个函数内出现过多的if语句呢?
先来思考,出现很多if语句,说明我们的cJSON格式的报文有很多的同级对象,不同的对象对应不同的业务,
所以我们应该以业务来进行划分,尽量将不同的数据解析划分到对应的业务代码模块中去。
而不是全部都放在一块,那样自然显得拥挤和不完美。
上图的方式是事先注册好根对象内的第一级别的下级对象,然后解析时遍历取出这些对象名,在收到的cJSON数据中去进行匹配,如果匹配上了,则进行后续的该对象的值处理。
如果没匹配上(cJSON_GetObjectItem函数返回NUILL),则继续尝试匹配下一个对象名看是否需要进行值处理。
注册-取出的思维在编程中很常用,这也是设计模式中观察者模式的一个运用。
.