qingmei2 / MVVM-Architecture

The practice of MVVM + Jetpack architecture in Android.
1.83k stars 282 forks source link

请教范例中 main 的 repository lifecycle 架构问题 #19

Closed RoyGuanyu closed 5 years ago

RoyGuanyu commented 5 years ago

Hi Qingmei2 大您好,

从您这个例子学到很多东西,想请教有关于 main 的数据生命周期问题。

这个专案里,进入 main 后,各个子页面各自有自己的 repository,生命周期跟著该 Fragment走。然而,是不是其实有些数据会是需要以 mainFragment 的生命周期为主,这样如果 Fragment 被回收掉才不会数据丢失需要从remote或是local storage 重载。 在这个专案比较少看到透过一个viewmodel/repository在多个Fragment共享数据的例子,有机会的话会想知道 qingmei2 会怎么样写这种场景需求。 期待有空回复指教,感谢。

qingmei2 commented 5 years ago

@RoyGuanyu

这种情况下,你只需要额外声明一个ViewModel,然后通过ViewModel本身的特性,让多个Fragment共享一个ViewModel的实例即可。

个人经验来讲,这种ViewModel复用共享的情况,首先一定要给ViewModel中添加一定的注释,保证代码的可读性(对于整个team而言),其次,该ViewModel的职责要尽量单一,尽量避免一个巨大的BaseShareViewModel这种,导致未来某个版本需求变更导致代码修改幅度大的情况

RoyGuanyu commented 5 years ago

@ qingmei2了解,感谢回复〜 这边其实比较困惑是DI Kodein的部分,以这个项目为例,就是在 MainActivity 的 KodeinModule 中注册此ActivityWide 的 ViewModel,接着在其中的任何 Fragments 透过 closestKodein 来取得 Activity 注入的 viewmodel instance ,然后接下来进行 Activity 生命周期级别的数据操作。

qingmei2 commented 5 years ago

@RoyGuanyu

嗯嗯,如果实际项目不考虑Kodein,完全可以忽略它哈,因为这个项目毕竟是练手的项目,实际开发中项目的复杂度是远远超过这个repo的,因此技术选型还是需要慎重,这个repo的目的还是展示MVVM基本的实现方式和思路。

RoyGuanyu commented 5 years ago

了解,但已经入坑XDDD 感谢指教 哈