首頁>科技>

講真的,Airbnb 於開源界,真是不可忽視、貢獻巨大的存在。截止目前,其在 GitHub 網站已經開源 165 個專案,包括大名鼎鼎的移動端跨平臺動畫解決方案 Lottie 倉庫。

近日,Airbnb 公司的 GitHub 主頁又新添一員:MvRx 。

介紹 MvRx 之前,不妨看看這個專案誕生的背景。注意:為了表述上的方便,後文使用第一人稱代表 Airbnb 公司。

引入

隨著旅遊業的興盛,Airbnb 正以前所未有的速度向前發展,越來越多的人使用 Airbnb 產品開始旅行。僅這一年,我們就釋出過 Airbnb Plus 版本,同時還有無數的其他專案,迫不及待地想要和外界分享。在 Android 方面,近乎天文數字般的商業增長使得我們開發人員非常繁忙。我們的 app 端,要做的事情比以往任何時候都要多。過去的一年,我們新增了 286 個頁面,並且沒有減慢步伐的跡象。為了能夠活得更輕鬆一些,我們開始尋找一些防止重複性工作的模式,來幫助我們專注於迭代產品本身。

簡介

今天,我們已經做好準備,分享我們的 Android 架構:MvRx(發音為 “mavericks”)。MvRx 誕生於我們一次又一次地解決相同問題的認知beijingxia,使我們不再專注於開發產品。在 Android 端,存在無數的小工作需要工程師去做或考慮,來保證 app 的高品質。譬如:

一遍接一遍的建立含有 toolbar,RecyclerView,和 footer 的佈局檔案;與 Android 生命週期糾纏不清;在正確儲存 view 狀態和業務邏輯;諸如網路和資料庫呼叫的非同步請求所帶來的 onSuccess 和 onFailure 回撥處理;

MvRx 使所有這些變得更加簡單。我們開始著手做這件事時,只有一個目標,那就是更簡單、更快和更有趣地開發一款高品質的產品。原本開源這個框架並不是我們的目的,然而隨著 MvRx 的漸漸成形,我們知道必須要這麼做了。我們不僅希望與外界分享,而且我們還希望 MvRx 可以應用於 Airbnb 以外的我們自己的專案,因為它可以從業餘愛好專案擴充套件到擁有 70 名工程師和近百萬行程式碼的應用程式。

實踐

MvRx 建立在 architecture components、RxJava、Epoxy 的基礎上,使用 Kotlin 語言開發的,並且只有 Kotlin 這一個版本。圍繞 Kotlin 語言進行設計使我們能夠構建出一個比使用Java 語言實現更清晰的 API。

就像這樣:

data class HelloWorldState(val title: String = "Hello World") : MvRxStateclass HelloWorldViewModel(initialState: HelloWorldState) : MvRxViewModel<HelloWorldState>(initialState) {    fun getMoreExcited() = setState { copy(title = "$title!") }}class HelloWorldFragment : BaseFragment() {    private val viewModel by fragmentViewModel(HelloWorldViewModel::class)    override fun EpoxyController.buildModels() = withState(viewModel) { state ->        header {            title(state.title)        }        basicRow {             onClick { viewModel.getMoreExcited() }        }    }}

在這個簡單的 Fragment 中,只有 18 行程式碼,我們有一個ViewModel,其範圍限定為 Fragment,但將在配置更改中保留,以及頁面的預設佈局和可測試狀態。當狀態改變時,頁面將自動更新,並且只有實際更改的特定部分將被更新到RecyclerView 中。而且,你看到的所有這些程式碼都在後臺執行緒中執行,因為 MvRx 可以無縫地處理執行緒。

MvRx at Airbnb

在短短的幾個月內,MvRx 已經從一個試點階段轉變為我們編寫近所有新頁面的標準方式,開發人員對它非常喜愛。在最新的調查中,93% 的接受調查的工程師(n = 14)給出了8/10 或更高的評價。此外,MvRx 的採用率也是驚人的。試點階段的增長非常穩定,但是當我們在 7 月份開放給所有團隊時,使用率持續攀升。最近短短几個月內,我們已經使用 MvRx 構建出超過 110 個頁面,並且很快就被納為從簡單靜態功能到我們 app 中一些最複雜功能的任何頁面的首選方式

開始使用

以上便是來自 Airbnb 工程師對 MvRx 新的架構解決方案的介紹。你有躍躍欲試的衝動嗎?

文章不易,如果大家喜歡這篇文章,或者對你有幫助希望大家多多,點贊,轉發,關注 哦。文章會持續更新的。絕對乾貨!!!

最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 羅永浩被拼多多坑了,拼多多要幹什麼?