物聯網連接服務的模塊化思路

鎏雲物聯

在許多具有複雜系統的領域中,模塊化都被證明是一個有用的概念,這樣一種在傳統設計基礎上發展起來的一種新的思想,現在已經成為一種新技術被廣泛的應用。

物聯網連接服務的模塊化思路

在物聯網領域中,當現在有的代碼結構使你無法很方便地添加新特性之時,如何通過優化代碼,項目結構,做到項目的高可用,可維護性強,代碼的高內聚、低耦合的產品需求效益?本文著力在代碼重構的方向上,通過模塊化的思路設計來講解如何重構一個低內聚、高耦合的項目,使其達到高度優化,完善設計,使項目架構更完善可用的目的。

什麼是模塊化設計原則?

我們都知道Java面向對象最核心的就是封裝、繼承、多態,其中封裝就是模塊化設計的基礎,通過對通用方法,特性的封裝,形成了一個個方法和類文件,那麼通過對一些相同作用亦或者相互起作用來實現某一個作用的類和方法進行整理歸併到單獨的項目中,就形成了不同的模塊,這也是代碼設計的初衷體現:“Don’t repeat yourself”,通過封裝抽象代碼共性,進行單一設計來達到模塊化設計的原則,從而實現服務層面的複用,這裡我簡單總結一下模塊化設計原則需要做到的幾點內容:

1、模塊必須體現單一原則,做好單一的事情而不是做更多事情;

2、合理拆分,越核心、越底層的模塊要追求穩定,更少的更改;

3、模塊之間不要有太多依賴,特別要避免出現相互依賴;

4、提升每一個模塊的完備性,減少模塊缺陷;

為什麼要進行模塊化設計?

模塊化的代碼設計最簡單的是可以實現按需加載,進而保證了我們不會把寶貴的頁面加載時間浪費在下載和解釋多餘的代碼上,從而更高效地完成任務。我們來簡單的列舉一個例子,從團隊協調合作來講述模塊化設計的重要性。

比如現在有一個電商項目,由三個團隊來進行開發,其中A團隊主要負責前端和UI設計。B團隊主要負責商品數據展示和下單服務,C團隊主要負責支付和物流服務,當然實際得到電商項目不能只是簡簡單單的這麼一點內容,這裡只是大概舉個例子,但是從上面我們已經可以看出,如果我們的電商項目不進行模塊化設計的話,三個團隊之間的工作展開是會存在重疊關係的,其中BC團隊數據的交互呈現需要依賴A團隊的作業交互,而A團隊也需要BC團隊在數據上提供支撐,B團隊在商品下單進行支付和支付完後查詢物流進度等又需要依賴C團隊的支付功能,C團隊的物流展現也需要B團隊提供訂單數據。

物聯網連接服務的模塊化思路

那麼在項目未進行模塊化開發之前三個團隊勢必要花費大量時間在一些提前約定事件,比如說數據格式內容,接口簽名和響應等問題上消耗大量時間成本,在項目開發過程中,溝通成本太高往往是導致項目開發進度延期的主要問題之一,所以如果該電商項目進行模塊化設計,前後端進行分離開發,A團隊先完成頁面設計和提供接口文檔,BC團隊講後臺服務模塊化,拆分為支付模塊,物流模塊,商品模塊等,講耦合的工作進行單一化拆分,這樣彼此的工作就能並行的展開,各自維護起各自的模塊也會更加高效、便捷。

簡單來說——模塊化,將功能分解,降低之間的耦合性。 從而,為了替換某個模塊達到質量或效率的提升,就不會改變整個結構,只需要改相應的模塊,工作量就會明顯減少,所以模塊化的應用,是每個行業的終極設計。

模塊化的優缺點

在平時的工作任務中,歸納起來,模塊化設計幾個功能:

一、達到業務功能隔離,實現項目的版本控制和跨團隊並行開發的可能;

二、實現了代碼的高可用和可複用,減少冗餘代碼,增強了可維護性;

三、分模塊化可以實現分佈式部署,減少項目癱瘓風險,提升了項目性能;

四、項目層次清晰明瞭,模塊化設計也為微服務實現提供了可能。

任何事情都有其兩面性,當然模塊化設計也不是萬能的,由於前期模塊化設計需要花費時間,不同模塊之間銜接存在風險,同樣也增加了項目開發的難度,前期無法做到快速開發;另外模塊間通信,模塊間發送消息也會很耗性能。

模塊化思路分解

以我們的“鎏雲·CMP”一個物聯網連接管理平臺為例,通過該平臺我們為物聯網卡及設備提供了通信管理組件、設備管理組件、eSIM組件、數據服務組件於一體的服務,下面我將為大家講解如何對這樣一個平臺進行模塊化拆分。

首先,解決前後端分離問題;將前端當成一個模塊,後端也整體當成一個模塊來進行開發。在實現前後端分離上這裡提供一個參考給大家,與其使用AngularJs來做前端路由控制不如使用Vue.js來實現,vue.js有更友好的中文文檔支持,更輕便小巧易上手的特性,而且也是spa(single page web application)單頁web頁面開發的體現者,在使用vue.js分離前端之後,只需要使用nginx代理靜態頁面,就能實現頁面的部署,後端只需要提供跟前端人員約定好得到rest接口即可。

第二,後端的模塊化上;模塊化設計原則中提到過抽象模塊儘量抽象更底層、更核心的業務,因為只有底層核心的業務才是驅動整個項目的關鍵,相對比而言,一些簡單的功能,例如登錄,在長期來看代碼不存在變動,不涉及第三方授權登錄,需要做Oauth2認證的情況下,如果只是通過簡單的攔截器和區區百餘行代碼就能解決的事情,去抽取出一個登錄模塊實屬沒必要。在物聯網連接管理服務中,圍繞著卡和設備為核心的業務展開,通過分析業務功能我們可以發現,無論是卡還是設備都需要進行流量充值和第三方接口調用這兩塊核心,那麼完全可以將拆分一個充值模塊和內部API模塊(這裡區別於對外提供的API,僅供項目模塊之間調用),對外我們還可以提供一個API模塊,以便第三方通過API能夠接入我方平臺,使用我方平臺提供的服務。

在核心業務模塊之外,我們還需要做數據的緩存,統計,更新等操作,並且該操作將會是頻繁而且費時的,為了保證數據加載的實時性,就必須摒棄懶加載的方式,通過某種任務調度的方式去異步更新和緩存數據,這就需要拆分項目的任務調度模塊,在我看來這也是每一個項目所必須的一個模塊。

通過前面簡單的舉例和講解,可以看出在進行模塊化分解時並不是一時興起就進行拆分,而是在對功能點適用範圍,變更頻率,是否核心等多方面分析之後才能得出是否需要進行模塊化拆分這麼一個結論的,只有合理的模塊化設計才能真正的體現這樣去做所帶來的好處。

上期看點 https://zhuanlan.zhihu.com/p/48099971

物聯網連接服務的模塊化思路

深圳鎏信科技有限公司是國內領先的物聯網智慧連接技術服務商,專注於通信、網絡、安全技術的研發與PaaS服務的提供,憑藉著設備實時互聯、智能化管理、預測性運維和安全態勢智能感知的技術引領國內IoT雲生態,實現了海量設備在不同應用場景的業務需求,有效地降低了客戶連接成本,提升了服務連接效率,使物聯網終端連接更容易、業務更智能、體驗更流暢、數據更安全。

鎏雲·CMP 物聯網智慧連接管理平臺


分享到:


相關文章: