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

一个 MVVM Base Project

  •  
  •   winterbells · 2020-03-03 23:58:04 +08:00 · 5301 次点击
    这是一个创建于 1552 天前的主题,其中的信息可能已经有所发展或是发生改变。

    点此到达 -> MVVMBaseProject

    前言

    迫于失业在家,想着把之前工作上零零碎碎的知识整理下,想来想去又不知道从何下手。准备把之前自己写的两个应用重构下,毕竟好久没动了。新建工程的时候想起来之前在公司的时候维护了一个 BaseProject。

    有段时间经常要调研各种库或者新技术,还有时不时让我给建个工程(那些工程好像都没下文了。。)。每次 new project 太麻烦了,于是将我手头上现有的项目整理了一下,精简出个通用的基础工程,每次有需要直接新建个分支(本地分支)。由于已经离职,拿不到原来的那份了。

    因为之前的项目中很多基础代码就我在维护,所以写起来和原来差不了太多。不过写之前看了下文档,有几处别扭的地方意外解决了(^▽^)

    说明

    这个工程可以直接下载下来,改个包名开始新做项目。代码结构保持了以前做项目的风格( hmmm,因为每次项目开始提交很多基础功能的原因,所以很多地方都是我的风格)

    模块

    主要有三个

    • app 主程序,页面相关代码都在 ui 包里
    • lib 通常这个模块可以直接复制到其它项目中,里面会有很多通用的组件,MVVM 框架也在这里
    • network 网络模块我平时很少动,所以写的不好看,我离开项目之前还没有使用协程来替代 RxJava

    app

    代码要做好分类,页面的在 ui 包,viewModel 在 viewmodel 包,也可以自己定个规则,反正不能乱

    lib

    lib/extension 这里面放着的都是 kotlin 扩展方法,Activity、Fragment 等直接用的

    lib/MVVM 所有的 Activity 和 Fragment 页面都用 DataBinding (龟腚,当然你自己也可以改) BaseActivity、BaseFragment 没有其它好讲的。 需要 Butterknife 绑定的话在 onCreate() 或者 onCreateView() 中加一下就 OK 了

    主要是 BaseViewModel 和 ViewModelFactory BaseViewModel 实现 LifecycleObserver,在 ViewModelFactory 中,绑定 ViewModel 时将生命周期传过去。这时 ViewModel 就能自动执行 onCreate() 了。如果有 extras 或者 arguments 的话也可以在这里传。

    network

    用 retrofit + 协程的方式来发网络请求,写的比较粗糙,但也能用了。后面会慢慢改

    就酱~

    4 条回复    2020-03-04 09:04:52 +08:00
    maninfog
        1
    maninfog  
       2020-03-04 00:08:09 +08:00 via iPhone   ❤️ 1
    已 star
    winterbells
        2
    winterbells  
    OP
       2020-03-04 08:35:19 +08:00 via Android
    @maninfog 感谢
    QAQ 都没其他人看
    Lin0936
        3
    Lin0936  
       2020-03-04 08:58:11 +08:00   ❤️ 1
    已 Star
    winterbells
        4
    winterbells  
    OP
       2020-03-04 09:04:52 +08:00 via Android
    @Lin0936 要是能提点意见就好了🤣

    虽说很多项目都用类似的架构,但最多就两个人会碰这块代码,有点闭门造车的感觉了⊙﹏⊙

    就好像 viewmodel 可以用 by viewmodels 这个代理方法懒加载,我也是最近看文档才知道的。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3026 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:25 · PVG 20:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.