Airbnb 再出力作,开源 Android 架构新方案:MvRx

讲真的,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") : MvRxState

class 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 中一些最复杂功能的任何页面的首选方式。

开始使用

我们很高兴与全世界分享 MvRx。如果你想了解更多信息,欢迎访问 MvRx 的 GitHub Wiki 页面学习和使用!

以上便是来自 Airbnb 工程师对 MvRx 新的架构解决方案的介绍。你有跃跃欲试的冲动吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值