前言
在某些B 端產品中窥摄,會通過安裝物聯(lián)網設備來提高工作效率,比如能耗監(jiān)測础淤、智能抄表崭放、遠程監(jiān)測等等。如果接入的物聯(lián)網設備品牌多鸽凶、各家協(xié)議币砂、數據格式不一致的話,那么就需要產品層面設計一個物聯(lián)網接入模塊玻侥,這個模塊充當業(yè)務層和設備層的橋梁决摧,使得業(yè)務層無需關心具體接入設備的品牌、協(xié)議和數據格式凑兰。有了物聯(lián)網接入模塊后掌桩,接入新的設備時就不需要更改業(yè)務層的設計了,也就能夠減少業(yè)務層的開發(fā)工作量姑食,提高整個團隊的產出效率波岛。
一個反面案例
先給大家看一個沒有物聯(lián)網設備接入模塊的反面案例,這樣會更好理解為什么需要物聯(lián)網接入模塊音半。本人曾經接觸過一個物聯(lián)網監(jiān)測項目则拷,他們的產品選用的物聯(lián)網設備只有一個廠家贡蓖,因此產品設計沒有多考慮,開發(fā)這邊也是為了盡快上線煌茬,于是設計了下面這樣的產品架構斥铺。
結構很簡單,實現(xiàn)起來確實也很快坛善,產品順利上線了晾蜘。隨著業(yè)務的發(fā)展,從成本和廠家設備的質量綜合考慮眠屎,公司又選了另外一個廠家的同類設備笙纤,但問題來了,新廠家的數據格式和之前的廠家的完全不同组力,為了接入新設備,他們的產品架構變成了下面的樣子抖拴。
業(yè)務模塊變“胖”了燎字,需要新的業(yè)務邏輯來對接新廠家的數據 API 接口。更為失誤的是阿宅,他們的前端頁面的字段名稱是按照之前的設備寫死的候衍,這就意味著前端應用也需要按不同的廠家類型做適配,如果是廠家1就按廠家1的數據格式展示洒放,如果是廠家2就按廠家2的數據格式展示蛉鹿。
之后,公司又引入了新的廠家往湿,然后開發(fā)同學就“炸鍋”了 —— 簡直就是在人工制造“代碼屎山”把臁!引入一個新的廠家领追,一是整個開發(fā)鏈條從設備數據 API對接他膳,到業(yè)務邏輯處理再到前端頁面展示全部都需要跟著改動;二是整個業(yè)務的代碼里面堆積了一堆按不同廠家做的條件判斷绒窑,越來越臃腫棕孙,難以維護。開發(fā)同學怨聲載道些膨,對產品經理的配合度自然會下降很多蟀俊。
問題在哪?
出了問題订雾,自然要看看怎么“甩鍋”肢预。那么這里到底是產品同學的問題還是開發(fā)同學的問題呢?個人覺得都有問題葬燎,但是產品是源頭误甚,責任更大一些缚甩。作為產品經理,應該要具備業(yè)務前瞻性窑邦。以這個案例來說擅威,物聯(lián)網設備屬于硬件設備,作為公司運營肯定會考慮硬件采購的成本冈钦,產品的質量郊丛、穩(wěn)定性。因此瞧筛,很大可能會使用其他廠家的設備替換厉熟。而且,物聯(lián)網設備有一個很大的特點就是较幌,設備已經部署后揍瑟,可能分布在全國各個地方,根本不太可能用一個新廠家的設備完全替換已有的設備乍炉。這就意味著绢片,產品設計上需要考慮不同廠家設備的共存情況 —— 也就是要能夠支持多個廠家的物聯(lián)網設備接入。
物聯(lián)網設備接入需要考慮不同廠家的兼容性岛琼,需要能夠同時接入不同廠家的同類功能設備底循。
如何解決問題?
先講我們生活中的一個例子槐瑞,我們知道不同國家的交流電的電壓是不同的熙涤,有220伏 ,也有110V的困檩。如果直接接入電器設備祠挫,電器設備會因為工作電壓超出范圍而導致燒毀。這個問題是怎么解決呢悼沿?通過電源適配器來解決茸歧,比如下圖是一個筆記本的電源適配器,標明了工作輸入電壓范圍是100-240伏显沈,雖然輸入電壓波動范圍很大软瞎,但是輸出一直穩(wěn)定在筆記本需要的電壓范圍內(下圖是19.5伏)。
適配器就是解決不同的輸入源不影響輸出的一個中間設備拉讯。受到適配器的啟發(fā)涤浇,軟件設計領域就產生了一個“適配器”模式。適配器模式就是將不同的輸入轉換為相同的輸出魔慷,從而避免業(yè)務層和輸入直接產生關系只锭。這樣,輸入源的改變處理全部由適配器來完成院尔,業(yè)務層則無需關心輸入源的變動蜻展。
對于物聯(lián)網設備接入喉誊,我們會發(fā)現(xiàn)和適配器要解決的問題是一樣的。因此纵顾,對于物聯(lián)網設備接入伍茄,我們應該設計一個適配層,作為廠家數據 API 和業(yè)務層的橋梁施逾。這個適配層的職責就是接入不同廠家的物聯(lián)網設備數據 API敷矫,然后轉換為業(yè)務層需要的標準格式數據。這樣汉额,即便是換廠家曹仗、換設備,都只需要更改適配層蠕搜,業(yè)務層和前端都不需要做任何改動怎茫。有了適配層之后,我們的產品架構就演變成下面的樣子妓灌。這種架構下遭居,不管接入多少個廠家、多少種設備旬渠,都只需要在適配層進行調整,業(yè)務模塊和前端無需做任何修改端壳。
圖中繪制的箭頭是單向的告丢,實際上換成雙向箭頭也是沒問題的。如果業(yè)務模塊需要下發(fā)指令到物聯(lián)網設備损谦,同樣也可以通過適配層將標準指令轉換為不同廠家設備能夠接收的相應指令岖免,接入新廠家設備同樣也不需要更改業(yè)務模塊。
經驗分享
其實上面說的反面案例類似的情況十分常見照捡,出現(xiàn)這樣的問題很大程度上是沒有類似的產品設計經驗颅湘。本人曾經負責過一個智能電表抄表模塊的產品設計,這里面就涉及到抄表栗精、計費闯参、欠費拉閘斷電、充值恢復通電悲立、手動通斷電等等業(yè)務鹿寨。在產品設計時,由于有適配器這樣的概念(實際經驗來自做軟件開發(fā)時的設計模式)薪夕,所以提前考慮了做適配層脚草。并且,明確和開發(fā)同學交待要考慮未來新的廠商設備接入原献。到后面馏慨,確實也因為采購成本原因埂淮,采購了另一個廠家的設備。由于有適配層的存在写隶,新廠家的智能電表非尘笞玻快就接入到產品中,而業(yè)務層并沒有做任何改動樟澜。要知道误窖,如果要更改業(yè)務層的抄表、計費秩贰、通斷電指令那開發(fā)的工作量就非常多霹俺,而且還容易出現(xiàn)紕漏導致 bug。
對于物聯(lián)網設備適配層毒费,通常來說需要下面幾個模塊:
設備檔案:設備檔案主要維護設備的基礎信息丙唧,其中關鍵的一個信息就是與廠家平臺對接的唯一標識,通常會是設備編號或 IMEI觅玻。在產品設計的時候想际,需要考慮支持移動端登記設備檔案以及批量導入。移動端登記是方便設備安裝的時候邊安裝邊登記溪厘;批量導入是應對大量設備的批量錄入胡本,提高效率。
接口管理:與不同廠家的對接接口管理畸悬,這里有兩種處理方式侧甫,一是開發(fā)直接在代碼層面完成,二是通過頁面配置完成蹋宦。第二種會更復雜一些披粟,但是通用性更強。
數據格式配置:將廠家的設備數據轉換為業(yè)務模塊的標準格式數據冷冗,和接口管理一樣守屉,一種方式是開發(fā)在代碼里完成,另一種方式是通過配置完成蒿辙。通常拇泛,如果是配置會和接口配置一起完成,將廠家的設備數據字段映射到業(yè)務模塊相應的字段思灌。
異常監(jiān)控:異常監(jiān)控包括兩種類型碰镜,一個是廠家的服務可用性監(jiān)控,另一個是業(yè)務數據層的監(jiān)控习瑰⌒饔保可用性是防止廠家的服務不可用導致自有業(yè)務的不可用;業(yè)務數據層的監(jiān)控是監(jiān)測異常數據,方便及時發(fā)現(xiàn)業(yè)務層面的問題柠横。比如我們的智能電表就遇到過一個極端的案例窃款,由于線路故障導致抄表數據異常。
另外牍氛,如果你的產品是 SaaS 平臺晨继,那么建議是按照“開箱即用”的理念來設計物聯(lián)網設備接入模塊。什么是“開箱即用”搬俊?那就是臟活累活由平臺運營來做紊扬,客戶在業(yè)務系統(tǒng)中只需要關注業(yè)務模塊即可。以我們的抄表為例唉擂,我們把設備檔案這個最繁雜的工作留給了平臺運營層面完成餐屎。我們會在平臺層面完成設備檔案的錄入,然后將設備分配給客戶的對應的業(yè)務單元玩祟。到了客戶這邊腹缩,只需要完成業(yè)務層面的計費、通斷電規(guī)則就可以像使用非智能表一樣使用我們的智能抄表功能空扎。
總結
本篇以實例的方式介紹了物聯(lián)網設備接入的產品設計藏鹊。可以看到转锈,通過引入適配層可以有效實現(xiàn)多廠家設備快捷接入而不影響業(yè)務層盘寡。對于產品經理而言,在做物聯(lián)網設備接入或者類似的功能模塊時撮慨,應當具備業(yè)務前瞻視野竿痰,提前預判可能的變化,在產品設計上引入應對變化的適配層甫煞,從而提高產品迭代的速度、減少開發(fā)工作量的同時提高產品的穩(wěn)定性冠绢。