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