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

2017-08-06 17:15:35 +08:00
 strayuncle
刚刚入门,学艺不精,请多指教。看了很多介绍的文章,只是从技术的角度来介绍,但是没说明白为什么会出现这些技术,我试图去理解一下:

常用架构:

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。
4743 次点击
所在节点    Android
2 条回复
Chrisplus
2017-08-07 09:04:35 +08:00
rx 不仅仅是做异步通讯的。rx 的作用在于提供给开发者一个基于观察者模式的事件流框架,在这里异步事件可以非常方便的进行整合操作(操作符),而无需关注底层的实现诸如线程安全等。另外 rx 也可以让基于触发观察同一类事件的编码尽量集中而非分散到各处,使得代码更加清晰,便于维护。
vjnjc
2017-08-07 12:10:38 +08:00
我觉得 view 层在 android 是 xml。。。
dragger 用过,感觉不是为了共享,而是为了解耦
rxjava 和 mvp 还在找机会试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/380832

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX