zoukankan      html  css  js  c++  java
  • cJSON解析数据如何避免过多if-else,实现解耦

    代码展示:

     

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

    这显然耦合性很强。

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


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

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

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

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

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

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

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    UVa 1451 Average (斜率优化)
    POJ 1160 Post Office (四边形不等式优化DP)
    HDU 3507 Print Article (斜率DP)
    LightOJ 1427 Substring Frequency (II) (AC自动机)
    UVa 10245 The Closest Pair Problem (分治)
    POJ 1741 Tree (树分治)
    HDU 3487 Play with Chain (Splay)
    POJ 2828 Buy Tickets (线段树)
    HDU 3723 Delta Wave (高精度+calelan数)
    UVa 1625 Color Length (DP)
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/15093985.html
Copyright © 2011-2022 走看看