2020 年了, Android MVVM 应该怎么写 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
devfeng
V2EX    Android

2020 年了, Android MVVM 应该怎么写

  •  
  •   devfeng 2020-08-17 15:48:04 +08:00 14849 次点击
    这是一个创建于 1883 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目里一直用的 MVP,最近出去面试,很多面试官问了 MVVM 相关问题,看来很多公司已经开始用上了 MVVM ?于是周末看了一下 MVVM,上来 DataBinding,ViewModel,LiveData 一套给我搞晕了,又害怕 Jetpack 这一套不是国内互联网的主流方案,所以来 V 站请教一下大佬们,Android MVVM 的主流方案,或者能丢给我几个开源项目学习一下,感激不尽

    21 条回复    2020-08-20 15:03:12 +08:00
    windplume
        2
    windplume  
       2020-08-17 17:10:31 +08:00   1
    B 站搜索 longway777
    coolmint
        3
    coolmint  
       2020-08-17 17:12:15 +08:00   1
    有个专栏叫重学安卓,可以订阅一个看看,里面不少干货,现在小团队开发新产品用 jetpack 这一套挺快的,面试也是重要知识点,确实可以好好看看。
    wobuhuicode
        4
    wobuhuicode  
       2020-08-17 17:19:14 +08:00
    flutter ……
    感觉原生安卓的 MVVM 搞出来单纯就为了 KPI,内置的 API 经过这几年的布局 MVP 已经很成熟了。新 API 能没坑?
    毕竟都是新 API,还不如直接用 flutter 算了。踩坑不如踩一个成熟点的
    rebounce
        5
    rebounce  
       2020-08-17 17:24:53 +08:00   1
    @wobuhuicode MVVM 很成熟也能解决很多问题,Flutter 才是那个可能有坑的。跨平台就其源头就不会做大,举个例子,Flutter 一旦做大到影响 iOS 原来的开发生态,就会被苹果拒之门外。
    xiaoliu926
        6
    xiaoliu926  
       2020-08-17 17:30:56 +08:00
    azhangbing
        7
    azhangbing  
       2020-08-17 17:58:23 +08:00
    我一直在想有没有必要搞这么复杂
    hongch
        8
    hongch  
       2020-08-17 18:17:24 +08:00
    1.到底项目多大才需要 mvvm
    2.上 mvvm 的目的是啥?单纯为了架构而架构?
    3.别人在用不一定适合当前项目
    4.livedata 的 demo,google 官方不是有吗
    xuanbg
        9
    xuanbg  
       2020-08-17 19:04:42 +08:00
    MVVM 已经被实践证明是一种优秀的设计模式。能很好地将 UI 、交互逻辑、业务逻辑和数据解耦。MVVM 模式的运用,无非就是把代码分门别类写对地方而已,实际上也是封装思想的一种体现。
    zhuangzhuang1988
        10
    zhuangzhuang1988  
       2020-08-17 20:45:07 +08:00
    要不看看 xamarin 的 mvvm??
    Xusually
        11
    Xusually  
       2020-08-17 23:54:54 +08:00
    MVVM 反而新手友好。。。老手看不上也正常
    手动狗头.gif
    Habsburg
        12
    Habsburg  
       2020-08-18 00:12:48 +08:00
    你不会看 github 的吗
    WebKit
        13
    WebKit  
       2020-08-18 09:30:35 +08:00
    @wobuhuicode #4 flutter 现在坑还是太多,复杂页面也有点卡。。
    WebKit
        14
    WebKit  
       2020-08-18 09:32:10 +08:00
    MVVM 一般只用 ViewModel,LiveData,DataBinding 刚出来那阵用了一段时间,就放弃了。编译起来坑太多,还不能复用 layout
    gam2046
        15
    gam2046  
       2020-08-18 09:53:28 +08:00
    大多数场景下,个人感觉自带的数据绑定就足够了,还避免了很多 NPE 的坑。但我没有写过很大型的 Android 应用
    devfeng
        16
    devfeng  
    OP
       2020-08-18 10:35:09 +08:00
    @WebKit 是的,我觉得 DataBinding 污染 xml 不太好,LiveData+ViewModel 已经可以很好工作了
    krystal9527
        17
    krystal9527  
       2020-08-18 14:08:06 +08:00
    @devfeng 可以看看 ViewBinding,是 DataBinding 功能弱化版本
    fansangg
        18
    fansangg  
       2020-08-18 16:27:53 +08:00
    @devfeng databinding 那么香,居然被你说成污染 xml...
    fansangg
        19
    fansangg  
       2020-08-18 16:30:05 +08:00
    建议了解一下 bindadapter
    mx8Y3o5w3M70LC4y
        20
    mx8Y3o5w3M70LC4y  
       2020-08-20 13:26:22 +08:00 via iPhone
    2020 年了,任何新的安卓项目,无论什么复杂程度,我觉得都该用 mvvm+jetpack 。btw 我现在这个公司,还在用敲厉害的 mvc,封装的敲完美,代码看起来敲赏心悦目。
    Bens0n
        21
    Bens0n  
       2020-08-20 15:03:12 +08:00
    首先 mvvm mvp 都只是一些架构模式,你问的问题没有意义的,你需要了解 mvp 和 mvvm 的区别。
    什么时候用 mvp 什么时候用 mvvm,还有怎么实现
    个人感觉直接使用 jetpack ( databinding 、livedata 、viewModel 、lifecycle )上手快,代码比较稳定,内存泄漏很少,写着也快
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     907 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:27 PVG 05:27 LAX 14:27 JFK 17:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86