您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

使用Swfit重寫Uber的好與壞

大小:0.5 MB 人氣: 2017-09-28 需要積分:1

  本文出自Uber移動(dòng)架構(gòu)和框架組負(fù)責(zé)人托馬斯·阿特曼于2016年在灣區(qū)Swift峰會(huì)上的演講,分享了使用Swfit重寫Uber的好與壞。以下為譯文:

  我是托馬斯·阿特曼,目前是Uber移動(dòng)架構(gòu)和框架組負(fù)責(zé)人。Uber現(xiàn)在的用戶量已經(jīng)達(dá)到數(shù)百萬,這么大的用戶量,Uber是如何用框架實(shí)現(xiàn)的呢?

  Swift與百位工程師的故事——原因、架構(gòu)、經(jīng)驗(yàn)

  今天我想談?wù)勔话俣嗝鸘ber工程師是如何使用Swift編程語言的,在上周三新發(fā)布的Rider App主應(yīng)用程序全部都是用Swift語言重構(gòu)的。接下來我的分享主要包括三個(gè)部分:選擇Swift的原因、Uber新架構(gòu);重構(gòu)經(jīng)驗(yàn)。

  優(yōu)步的開端——重構(gòu)的原因

  這是整個(gè)移動(dòng)團(tuán)隊(duì)四年前的樣子(指向屏幕顯示有三名工程師的照片),就是從那時(shí)開始,他們著手搭建了我們現(xiàn)在這套老應(yīng)用的基礎(chǔ)。老的應(yīng)用程序已經(jīng)穩(wěn)定使用了四年,但由于移動(dòng)開發(fā)團(tuán)隊(duì)的指數(shù)級的增長,這套架構(gòu)的缺點(diǎn)也逐漸顯示出來,基于這套老架構(gòu)想做功能開發(fā)也變得越來越困難。由于跟不同團(tuán)隊(duì)之間共用了很多ViewController,所以每次也需要對其它的代碼進(jìn)行測試。老架構(gòu)真正讓我們感到崩潰的主要原因是它是由兩位工程師寫出來的,但是目前團(tuán)隊(duì)已經(jīng)發(fā)展到了100多人。與此同時(shí),那套產(chǎn)品本身的用戶量也不大。我們已經(jīng)在多個(gè)城市開始運(yùn)行,產(chǎn)品滑塊底部密集的問題也顯示出來了,原因就是因?yàn)樗械膱F(tuán)隊(duì)都希望在他們所在的城市能夠推出新的產(chǎn)品。我們也想對Rider App做一套全新的用戶體驗(yàn)界面?;谏鲜龅倪@些問題,其實(shí)歸納起來也就是目前那套應(yīng)用的架構(gòu)問題和用戶體驗(yàn)界面的全新設(shè)計(jì)問題。未來不再是研究老架構(gòu)然后去解決問題這種形式了,而是一切都從頭開始。

  2015年做了很多糾正錯(cuò)誤工作,試圖去完善老的結(jié)構(gòu),但對Uber的全新設(shè)計(jì),將會(huì)從根本上解決問題,到時(shí)會(huì)處于一個(gè)更安全的階段,從頭去重新設(shè)計(jì)也是最理想的一種解決問題的方式。

  重構(gòu)架構(gòu)的目標(biāo)——穩(wěn)定可靠并且支持未來發(fā)展

  基于這兩個(gè)重構(gòu)原因開始了新架構(gòu)的研發(fā)。最基本的需求就是滿足上述兩個(gè)要求,保證四條核心流程的穩(wěn)定,這基本上就意味著崩潰率處于最低級別。 如果您的應(yīng)用程序沒有崩潰,但用戶仍然停留在某些屏幕上,顯然這問題很重大,這會(huì)讓用戶覺得不可靠。

  我們當(dāng)然也希望新開發(fā)的架構(gòu)能夠支持Uber接下來數(shù)年的發(fā)展,就像當(dāng)時(shí)設(shè)計(jì)這套老架構(gòu)的時(shí)候是為了滿足過去這四年發(fā)展的想法是一樣的。

  Swift成為了我們的選擇

  為了實(shí)現(xiàn)上述的兩個(gè)目標(biāo),我們選擇了Swift。當(dāng)時(shí)我們認(rèn)為Swift是更加安全的,至少在設(shè)想里是的,然而實(shí)際生活中并沒有人去驗(yàn)證這一點(diǎn)。

  我們認(rèn)為編譯器中的類型安全性會(huì)讓問題更早的暴露出來,而不是等到產(chǎn)品上線以后再出現(xiàn)問題。

  而我們知道,從現(xiàn)在開始的這四年,Swift將會(huì)進(jìn)入到一段黃金發(fā)展期,它將會(huì)成為蘋果公司未來唯一一門大力推廣的語言。

  時(shí)間線

  從今年年初開始啟動(dòng)的,在二月份的時(shí)候,我們當(dāng)時(shí)還希望我們所做的事情是正確的,因?yàn)橛幸恍┕こ處熢谝郧暗墓揪突ㄙM(fèi)了大量的時(shí)間去做重構(gòu)的事,但最終都以失敗告終。為了保證重構(gòu)能成功,挑選出了幾位核心工程師,讓他們花了5個(gè)月的時(shí)間去研究老的架構(gòu),在這5個(gè)月的時(shí)間內(nèi),我們就只干這一件事:架構(gòu),框架,完成一些基礎(chǔ)的工作,最終搭建了一套很完美的基礎(chǔ)框架,所有人都是以這套基礎(chǔ)框架為原型進(jìn)行開發(fā)。

  6月,架構(gòu)搭建好,開始讓核心流團(tuán)隊(duì)開始使用。核心流打算采用一種新的uberX騎行或者是uberPOOL騎行,因此我們增加了20位工程師,花了兩個(gè)月的時(shí)間去審查新的架構(gòu),確保我們提出來的東西與之前構(gòu)建一款新產(chǎn)品的要求是吻合的。事實(shí)證明,與最開始的產(chǎn)品要求相比,的確遺漏了一些東西,比如在視圖層,一旦工程師開始進(jìn)行轉(zhuǎn)換或者做一些復(fù)雜的視圖操作,那么我們必須調(diào)整架構(gòu)以滿足他們的需求。但是過了兩個(gè)月,我們?nèi)〉昧诵碌倪M(jìn)展,我們不再需要對代碼庫進(jìn)行大量遷移,并且把平臺(tái)開放給了每一個(gè)人,如果他們需要的話,也可以移交他們的功能了。

  新架構(gòu)

  新架構(gòu)叫”Riblets”,它是由Router、Interaction、Builder、Presenter、View這幾個(gè)核心組件構(gòu)成的,這也是VIPER框架的一種思想。我們研究了VIPER、MVVM和MVC,最終提出的方案是在VIPER基礎(chǔ)之上增加一些我們自己創(chuàng)新的元素在里面。最終目標(biāo)就是將每個(gè)功能模塊化,并且每一個(gè)模塊可以獨(dú)立的進(jìn)行測試。Riblet框架里的每一個(gè)核心組件都有一個(gè)協(xié)議接口,所以開發(fā)者可以把每一個(gè)單元單獨(dú)拿出來,對它進(jìn)行充分的測試。Riblets框架里的每一個(gè)模塊都會(huì)在樹里面進(jìn)行管理,因此沒有狀態(tài)機(jī),取而代之的是一個(gè)狀態(tài)樹。狀態(tài)樹里面的每一個(gè)節(jié)點(diǎn)就是一個(gè)Riblet,新架構(gòu)中的核心部分是基于業(yè)務(wù)邏輯的,而不是視圖邏輯,并且所有的業(yè)務(wù)邏輯都是由本地決定的。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價(jià):好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?