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

Android 的软件架构

  •  
  •   silvernoo · 2019-09-07 00:27:08 +08:00 · 12572 次点击
    这是一个创建于 1938 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近从头写一个安卓 APP,用上了 AndroidX 工具包和 MVVM 架构,依赖注入框架,双向绑定,事件驱动。感觉安卓软件复杂度直接上了几个台阶,大量代码依靠动态生成。编译报错不太容易定位。

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

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

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

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

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

    ·

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

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

    ·

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

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

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

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

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

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

    其次讨论问题就讨论问题,上来就喷人,谁惯着你的臭毛病?
    seagull007
        11
    seagull007  
       2019-09-07 09:50:36 +08:00 via iPhone
    @KunMinX 理解到位
    hyyou2010
        12
    hyyou2010  
       2019-09-07 09:53:01 +08:00
    说得是 jetpack 那一套吗?
    HongJay
        13
    HongJay  
       2019-09-07 10:38:41 +08:00
    @KunMinX 学习了
    arrow2015
        14
    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
        15
    arrow2015  
       2019-09-07 11:19:30 +08:00
    “而且 Android 的双向绑定真不像前端那么易用,不但代码量大增,还有无数的坑。目前还是边写边熟悉的阶段,开发效率低下。我有时候觉得未免太过度设计了。说了这么多,可能是我自己太菜了。”
    建议楼主不用继续研究 databinding 了。我用过 1 年多 databinding。现在我写新的应用,我是不会用它了。
    loshine1992
        16
    loshine1992  
       2019-09-07 11:24:58 +08:00
    最近用 LiveData + ViewModel + Kotlin + Koin + Navigation + coroutines 写

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

    依赖注入用的是 Koin,没用过 dagger2 不评价,Koin 还是很好用的,可以尝试一下
    maokabc
        20
    maokabc  
       2019-09-07 14:37:15 +08:00 via Android   ❤️ 1
    之前就是直接写 activity 里只用了 eventbus,greendao 这类东西,后面看着 activity 里一大坨实在受不了。重构换 aac 了,双向绑定用着是真舒服,虽然报错蛋疼,但比以前代码里更新 view 状态爽太多。
    mxalbert1996
        21
    mxalbert1996  
       2019-09-08 01:13:34 +08:00 via Android
    关于 Data Binding 的报错,Android Studio 3.5 里改进了很多了,基本只通过正常 Build 的错误信息就能找到哪里错了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5355 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 09:12 · PVG 17:12 · LAX 01:12 · JFK 04:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.