程式碼展示:
資料接收函式內,解析cJSON資料時,一不小心就會冒出來一大堆if語句在一個函式內,後續想要新增網路功能時,必然又會導致需要在mqtt訂閱函式內去新增部分程式碼,實現解析新的報文。
這顯然耦合性很強。
解耦實現要求至少以新增函式的方式來增加業務功能,而非直接在原來的函式內部去進行新增或修改。
那麼如何避免在解析cJSON時一個函式內出現過多的if語句呢?
先來思考,出現很多if語句,說明我們的cJSON格式的報文有很多的同級物件,不同的物件對應不同的業務,
所以我們應該以業務來進行劃分,儘量將不同的資料解析劃分到對應的業務程式碼模組中去。
而不是全部都放在一塊,那樣自然顯得擁擠和不完美。
上圖的方式是事先註冊好根物件內的第一級別的下級物件,然後解析時遍歷取出這些物件名,在收到的cJSON資料中去進行匹配,如果匹配上了,則進行後續的該物件的值處理。
如果沒匹配上(cJSON_GetObjectItem函式返回NUILL),則繼續嘗試匹配下一個物件名看是否需要進行值處理。
註冊-取出的思維在程式設計中很常用,這也是設計模式中觀察者模式的一個運用。
.