Closed RDSunhy closed 2 years ago
另外 还想请教下 如何取消请求呢?希望大佬抽空能回复下 先谢谢了~
对于第一点:"登录;用户输入框的 username、password这种字段 长度、是否为空 之类的参数判断" 我个人的做法是倾向于怎么简单怎么来,直接在 Activity 中判断,也就是点击按钮后进行判断,因为我觉得如果把这个放到 VidewModel 中,通过 LiveData 来交互,太麻烦了,并且什么都放到 ViewModel 中,会导致ViewModel存在很多的 LiveData。
对与第二点:我看了下你的写法, 其实你现在的写法跟我的这三种方式的思想都不一样。你可以尝试在 Repo 中返回一个 Flow包裹的对象,这样貌似简单点。对于用完即丢的请求,你也可以在 ViewModel 中用 livedata 的扩展函数,这样可以少很多的模板代码。
对于第三点:"如何取消请求" viewmodel 跟 livedata 结合不会导致内存泄露,我暂时没遇到需要取消请求的场景,你可以到 stackoverflow 上搜下
个人觉得,没必要完全遵循谷歌的官方写法,适合自己项目才是最好的。。
对于第一点:"登录;用户输入框的 username、password这种字段 长度、是否为空 之类的参数判断" 我个人的做法是倾向于怎么简单怎么来,直接在 Activity 中判断,也就是点击按钮后进行判断,因为我觉得如果把这个放到 VidewModel 中,通过 LiveData 来交互,太麻烦了,并且什么都放到 ViewModel 中,会导致ViewModel存在很多的 LiveData。
对与第二点:我看了下你的写法, 其实你现在的写法跟我的这三种方式的思想都不一样。你可以尝试在 Repo 中返回一个 Flow包裹的对象,这样貌似简单点。对于用完即丢的请求,你也可以在 ViewModel 中用 livedata 的扩展函数,这样可以少很多的模板代码。
对于第三点:"如何取消请求" viewmodel 跟 livedata 结合不会导致内存泄露,我暂时没遇到需要取消请求的场景,你可以到 stackoverflow 上搜下
个人觉得,没必要完全遵循谷歌的官方写法,适合自己项目才是最好的。。
感谢大佬回复~
1.如:登录;用户输入框的 username、password这种字段 长度、是否为空 之类的参数判断 放在 activity/fragment 中好 还是 viewModel 中好;根据谷歌官方架构指南以及他们提供的demo;我自己的理解好像是放到viewModel中更好;对项目结构设计不太懂。。。
2.如果在当前库的设计的基础上增加 room 缓存 可以提供下思路吗? 我开始参考google提供的demo中的设计;官方项目repo 都是返回的livedata 我觉得按照那样写模板代码太多了;就去掉了livedata 又借鉴您的项目 自己写了个四不像。。。 我自己尝试的写法: 抽象接口 Fetcher
实现类 SmartFetcher
调用示例,在Repo中 定义请求方法
viewModel 中调用 repo 层:
activity 中监听