臧成威:美團點評客戶端基于響應(yīng)式的架構(gòu)實踐
原創(chuàng)【51CTO.com原創(chuàng)稿件】近日,51CTO記者對美團點評iOS技術(shù)專家臧成威進行了專訪,一起探討了美團點評客戶端基于響應(yīng)式的架構(gòu)實踐。
【講師簡介】
美團iOS高級技術(shù)專家臧成威
臧成威,美團點評iOS高級技術(shù)專家。2012年開始接觸移動互聯(lián)網(wǎng),曾從事Android內(nèi)核訂制研發(fā)和iOS 應(yīng)用開發(fā)。2013加入CSDN,開始接觸全棧開發(fā)Ruby on Rails框架。 2014年加入百度任職高級工程師。2015年3月加入美團點評iOS團隊。
近年來,由于移動客戶端的業(yè)務(wù)復雜度越來越高,而移動客戶端處理的邏輯又基本是異步邏輯,這就需要一種更好的形式來處理大量的異步的情況,減少狀態(tài)并盡量使用聲明的方式來書寫代碼實現(xiàn)需求,而響應(yīng)式恰好能否幫助解決這些異步問題,所以,響應(yīng)式的開發(fā)方式正在被越來越多的開發(fā)者接受。
美團點評iOS客戶端基于響應(yīng)式架構(gòu)的誕生
美團點評iOS團隊是國內(nèi)較早使用ReactiveCocoa(簡稱RAC)函數(shù)響應(yīng)式庫的團隊。臧成威老師自2015年加入美團點評開始,就積極的對內(nèi)外進行RAC的使用和原理的指導培訓。
但是經(jīng)過2年多的發(fā)展,美團點評iOS團隊意識到整個團隊對函數(shù)響應(yīng)式編程的學習成本投入太大,對排錯等成本的投入也過于龐大。
基于對函數(shù)式編程和函數(shù)響應(yīng)式編程多年的理解和分析,臧成威老師認為對于工程化而言,面向?qū)ο缶幊滩攀亲詈唵吻胰菀妆唤邮艿?,但是又需要一個響應(yīng)式的能力。所以利用普通的面向?qū)ο笤O(shè)計來實現(xiàn)響應(yīng)式庫的想法就萌生了。
響應(yīng)式庫EasyReact建成后,為了能使其得到更好的利用,更好地降低使用的理解和學習成本,臧成威老師又帶領(lǐng)團隊開發(fā)了基于響應(yīng)式的MVVM框架:EasyMVVM。
基于響應(yīng)式的架構(gòu)簡述
首先,架構(gòu)的最下層提供了一套基于OOP的響應(yīng)式基礎(chǔ)庫EasyReact。它使用圖的數(shù)據(jù)結(jié)構(gòu),構(gòu)建了有向有環(huán)圖。當節(jié)點值產(chǎn)生變化的時候,它會順勢傳播到所有的邊上,進而改變其他的節(jié)點值。同時,每個節(jié)點一對多關(guān)系的關(guān)聯(lián)了監(jiān)聽者,當值發(fā)生改變時,監(jiān)聽者就能異步的得到反饋,這就解決了響應(yīng)問題。同時它也能夠讓兩個層級有了基本的綁定關(guān)系。
但是單有EasyReact還遠遠不夠,如果沒能在其上層建立一套完整的MVVM框架,開發(fā)者就難以有一個整體的思路。所以上層的垂直分層框架EasyMVVM促使大家的邏輯能夠各司其職的放置于各個層級之內(nèi)。
說到打造架構(gòu)過程中遇到的難題,臧老師表示,其實打造一套全新的響應(yīng)式基礎(chǔ)庫EasyReact并不是很難,因為它位于下層,并且沒有其他的依賴。但是在打造其上層框架EasyMVVM的時候,為了滿足View層的需要,就必須要依賴現(xiàn)有的UIKit框架。UIKit中大量API都是基于delegate模式來封裝的,然而這和響應(yīng)式編程的前置聲明理念剛好相反。
為了解決這一問題,美團點評iOS團隊封裝了一些全新的,不基于delegate的UI組件,將聲明式的接口提供給大家。同時還使用組合優(yōu)于繼承的形式提供了組件模塊化方案,方便大家將不同的業(yè)務(wù)邏輯分離,達到復用的目的。
架構(gòu):為業(yè)務(wù)而生
***,臧老師從生產(chǎn)環(huán)節(jié)、用戶使用環(huán)節(jié)和線上收集環(huán)節(jié)三方面講述了架構(gòu)的研發(fā)方向。
從生產(chǎn)的角度來看,架構(gòu)的研發(fā)方向就是自動化生成和可視化編程,所見即所得等。
從用戶使用環(huán)節(jié)的角度來看,架構(gòu)的研發(fā)方向就是動態(tài)化的部署和熱更新的能力等。
從線上收集的角度來看,架構(gòu)的研發(fā)方向就是動態(tài)埋點,自動埋點等。
【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】