我眼中 android 的应用架构 mvp、mvvm 和常用库 rxjava、dragger2 的关系 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
strayuncle
V2EX    Android

我眼中 android 的应用架构 mvp、mvvm 和常用库 rxjava、dragger2 的关系

  •  
  •   strayuncle 2017-08-06 17:15:35 +08:00 12042 次点击
    这是一个创建于 3036 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚刚入门,学艺不精,请多指教。看了很多介绍的文章,只是从技术的角度来介绍,但是没说明白为什么会出现这些技术,我试图去理解一下:

    常用架构:

    mvc,mvp,mvvm 是常见的架构模型,在 github 上很多流行的代码都有。架构不一样,在可扩展性、可测试性和可维护性上定都不一样。在简单的 app 中,activity 中包含了 view/model/controller。如果功能很复杂,activity 文件就是几千行。后续就需要解耦,把视图拿出来放在 viewmodel 中,把模型拿出来放在 model 中,然后 activty 中访问 viewmodel 和 model。


    常用库:

    rxjava,rxdatabinding,dragger2。我没有在项目开发中实际使用过,看文档看代码看的头大。rxjava 是做异步通讯的,在有的项目中,用户点击按钮可以用 rxjava 来实现,而不用监听。rxdatabinding 有点像 jsp,把 bean 写到 layout 的 xml 文件中,这样 activity 代码很少,但是 IDE 在编译的时候对 xml 很少检查,为了这点好处根本不值得。dragger2 是用来依赖注入的,类似于 java 中 spring 库的概念。在很多对象需要在 application 层面共享的时候,才考虑用 dragger,注解之后的代码看起来很简洁,但是读起来很痛苦。总之,rxjava 是好的,databinding 问题比较多,draggger2 要想清楚哪些对象需要共享出来。


    结合起来看,mvvm 和 mvp 中多余出来 viewmodel、model 都做成依赖注入,使用 dragger。应用处理逻辑可以用 rxjava 来完成。当然,mvvm 和 mvp 完全不使用 draager 和 rxjava 也可以实现。正常的进化步骤,最开始:什么架构都不用,把所有的代码都写在 activity 中,到第二层 mvvm 或者 mvp,将代码进行分离,多写 viewmodel 和 model 类,到第三层采用 dragger2,把共享单例变量拿出来写出 component 和 module。
    Chrisplus
        1
    Chrisplus  
       2017-08-07 09:04:35 +08:00
    rx 不仅仅是做异步通讯的。rx 的作用在于提供给开发者一个基于观察者模式的事件流框架,在这里异步事件可以非常方便的进行整合操作(操作符),而无需关注底层的实现诸如线程安全等。另外 rx 也可以让基于触发观察同一类事件的编码尽量集中而非分散到各处,使得代码更加清晰,便于维护。
    vjnjc
        2
    vjnjc  
       2017-08-07 12:10:38 +08:00
    我觉得 view 层在 android 是 xml。。。
    dragger 用过,感觉不是为了共享,而是为了解耦
    rxjava 和 mvp 还在找机会试
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     853 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:31 PVG 04:31 LAX 12:31 JFK 15:31
    Do have faith in what you're doing.
    ubao msn 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