V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
strayuncle
V2EX  ›  Android

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

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

    常用架构:

    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   ·   我们的愿景   ·   实用小工具   ·   1200 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:13 · PVG 07:13 · LAX 16:13 · JFK 19:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.