Android 的软件架构

2019-09-07 00:27:08 +08:00
 silvernoo
最近从头写一个安卓 APP,用上了 AndroidX 工具包和 MVVM 架构,依赖注入框架,双向绑定,事件驱动。感觉安卓软件复杂度直接上了几个台阶,大量代码依靠动态生成。编译报错不太容易定位。

而且 Android 的双向绑定真不像前端那么易用,不但代码量大增,还有无数的坑。目前还是边写边熟悉的阶段,开发效率低下。我有时候觉得未免太过度设计了。说了这么多,可能是我自己太菜了。
7900 次点击
所在节点    Android
21 条回复
bccoder
2019-09-07 00:51:33 +08:00
其他还好,我觉得 dagger 这种东西就增加了很多复杂度而且繁琐。可能是我太菜了。
HarryQu
2019-09-07 00:55:16 +08:00
很多页面业务都不复杂。mvc 就搞定了。
有些简单的页面,代码全写在 activity 都行。
优化是一步步来的,你使用的框架越多,出问题的时候越难排查 bug。
双向绑定,就用回调就可以啦,或者用 eventbus。
KunMinX
2019-09-07 01:01:16 +08:00
DataBinding 的存在,是为了解决视图的一致性问题。

LifeCycler 的存在,是为了解决生命周期处理的一致性问题。

LiveData 的存在,是为了让新手老手都能 不假思索地形成 通过唯一可信源分发状态 的开发模式。

ViewModel 的存在,是为了建立起作用域可控的、可共享的状态管理。

Navigation 的存在,是为了通过声明式编程来解决应用内导航的一致性问题。

·

综上,它们的存在,大都是通过解决一致性问题,来规避开发过程中 90% 的不可预期的错误。

不可预期的错误是十分耗费时间的,标准化开发模式的确立,能够让开发者不假思索地在开发时按部就班、效率倍增。

·

如果这样说还不理解的话,详见:

https://xiaozhuanlan.com/topic/3684721950
axlecho
2019-09-07 02:58:54 +08:00
边写边学不建议用框架跟 kotlin
winterbells
2019-09-07 06:57:17 +08:00
@HarryQu #2 你这几句话不是坏就是蠢
我们公司新来一 sx 就是你这种思想

为什么要怎么复杂,为什么一定要用 viewmodel ?
winterbells
2019-09-07 07:02:44 +08:00
@winterbells #5
代码写在 activity 不就行了,new 一个 thread 什么都能跑。
viewmodel 怎么通知 activity,fragment 怎么传消息。一个 eventbus 解决所有。

这种代码最后写出来还是人看的吗?

还有双向绑定用回调?什么回调? databinding 给你什么接口回调了?
Lin0936
2019-09-07 07:10:00 +08:00
其它还好,dagger2 这个东西谁用谁歇逼
winterbells
2019-09-07 07:13:12 +08:00
“而且 Android 的双向绑定真不像前端那么易用,不但代码量大增,还有无数的坑。”

双向绑定代码是减少的,至少少了一步走 view 层的代码。model 处理完之后页面自动就刷新了。
难用是真的,主要报错太难找。但有个方法可以看到具体报错信息。
在 AS 右边有个 gradle 选项卡,点开后选择一个项目或模块,然后选 other,往下一直翻,有个叫 kaptXXXdebug 或者 kaptXXXrelease ( xxx 为当前 build ),双击跑一下就能看到 xml 里哪一行的 databinding 报错了
ssynhtn
2019-09-07 07:13:48 +08:00
databinding 不是必用的,谷歌的文档里也是“if you use data binding,那么可以怎么怎么的”
HarryQu
2019-09-07 09:34:46 +08:00
@winterbells 首先工程中直接使用 thread、网络等模块而不封装。你用啥架构都不好使。

其次讨论问题就讨论问题,上来就喷人,谁惯着你的臭毛病?
seagull007
2019-09-07 09:50:36 +08:00
@KunMinX 理解到位
hyyou2010
2019-09-07 09:53:01 +08:00
说得是 jetpack 那一套吗?
HongJay
2019-09-07 10:38:41 +08:00
@KunMinX 学习了
arrow2015
2019-09-07 11:09:02 +08:00
待了 2 家公司 a 和 b,a 2 年,b 1 年半。a 公司的架构和楼主差不多,啥都用上了。b 公司用的很少,只用了 okhttp,eventbus,和一个图片加载库。都体验过后,我更喜欢 b 公司的代码结构。少用框架对提升编程水平有很大的帮助。楼主说的这些库里面,dagger 和 databinding 对编译超级不友好,编译出错后很难定位问题。另外这 2 个库用了之后我感觉写起代码很不自由。我觉得 @HarryQu 说的对,mvc 很好用,简单页面全写在 activity 没有任何问题。如果是简单页面,用 mvp,livedata,viewmodel 的话,代码量比全写在 activity 里多很多,也没啥优势,一个简单点击事件的处理分散在好几个文件里,来回跳转跟踪代码很麻烦。
arrow2015
2019-09-07 11:19:30 +08:00
“而且 Android 的双向绑定真不像前端那么易用,不但代码量大增,还有无数的坑。目前还是边写边熟悉的阶段,开发效率低下。我有时候觉得未免太过度设计了。说了这么多,可能是我自己太菜了。”
建议楼主不用继续研究 databinding 了。我用过 1 年多 databinding。现在我写新的应用,我是不会用它了。
loshine1992
2019-09-07 11:24:58 +08:00
最近用 LiveData + ViewModel + Kotlin + Koin + Navigation + coroutines 写

一个 Activity 搞定,Dagger 和 Databinding 这俩完全可以放弃了,不建议再学习
leopku
2019-09-07 11:43:00 +08:00
主要报错信息太难看,还有传值,代码清晰了
momocraft
2019-09-07 11:55:03 +08:00
不笑不足以爲道
crayygy
2019-09-07 13:47:27 +08:00
我们最近一个新项目把这里面提到的能用的几乎都给用了,Data binding,ViewModel,LiveData,Lifecycle,navigation,实话说整体学习曲线较高,不熟悉的人刚进来会很累,熟悉了以后成本比较低。

依赖注入用的是 Koin,没用过 dagger2 不评价,Koin 还是很好用的,可以尝试一下
maokabc
2019-09-07 14:37:15 +08:00
之前就是直接写 activity 里只用了 eventbus,greendao 这类东西,后面看着 activity 里一大坨实在受不了。重构换 aac 了,双向绑定用着是真舒服,虽然报错蛋疼,但比以前代码里更新 view 状态爽太多。

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

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

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

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

© 2021 V2EX