-
Notifications
You must be signed in to change notification settings - Fork 282
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
了解版本更新日志及下阶段目标,请看这里 #15
Comments
接下来的开发方向考虑优先级从高到低,删除线表示已完成:
如果您有其它的建议,欢迎在本页面进行提出,我将在第一时间进行回复。 🤝 |
求求大佬注释多写点,中文哈. |
为啥要移除liveData, 我觉得livedata挺好的, 如果把livedata的移除了,这个架构就失去了意义 |
如果说把databinding去掉,那么mvvm会大打折扣 |
因为MVVM架构中, 我们来看看Google官方的描述: 我们可以看到,无论是Room还是Paging等其它官方组件,Google官方还额外提供了 参考 因此,我完全有理由去站队
2019/6/12 补充我对自己学习的思路是,不断学习优秀的代码,保持对自己代码的怀疑,并督促自己对现有代码的优化。 我在日志中提出了 “离开DataBinding,LiveData毫无意义“,实际上在最近的学习中,我发现我的这个观点是片面、不成熟的,因为作为异步的实现思路之一, 协程 越来越成熟了,因此LiveData + 协程也是一个不错的MVVM的实现方式。 现在,我重新组织自己的语言,移除LiveData的原因应该是:因为项目中使用RxJava作为异步代码的组织者(而不是协程),因此暂时移除了LiveData。😃 |
嗯,我没仔细看。MVI是啥?我还是第一次了解。 你这边对jetpack讲得挺好的 |
我觉得如果mvvm没有了databinding,感觉这个框架就缺少很多。 |
感謝,透過這個 Project 學到不少,期待未來版本。 |
感谢作者,学到了很多东西,希望作者能改进一下网络请求: |
DataBinding 还会加入进来吗?核心组件移除了,MVVM还有啥意义呢 |
MVVM代表的是一种思想,Google从来没有说过 |
生命周期这一块,以后可能会麻烦些。 去掉DataBinding livedata以后 这个生命周期可能会受什么影响 比如? |
生命周期相关的是 |
见笑了,那么 还能做到数据驱动UI吗?看代码 还是通过找到相应的id设置属性或者值。 |
嗯,这个应该是不同的人有不同的理解,对于 对于 需要理解的是,“驱动”一词的关键在于 观察者模式 和 唯一的数据源,因此重点在于 个人观点,欢迎讨论哈。 |
之前一直在使用RxJava,最近在项目中使用了databinding+livedata,实践中也遇到了一些问题,虽然最终都找到办法解决了,但是总感觉不是最佳实践的方式,看到你上面的解答,发现确实RxJava能处理应付的场景还是要多很多,正如Google官方解释的那样,已经上手RxJava的开发者,继续使用RxJava会是更好的选择 |
如果您已经习惯了 感谢你的回复,我已经将我最新的理解在 6楼进行了补充更新,开发者应该根据自身情况选择合适自己的工具。 🤝 |
赞同你的看法,我也在关注协程的发展,其目前也越来越稳定,非常期待能在这个项目中看到你对livedata+协程的实践探索 😊 |
是否有计划更新下retrofit2.6.0对suspend的支持? |
协程很不错,但是现有的框架中已经有了 |
请问一下,每一个Model里面的ModelFactory相关代码都是手写的么。还是用模板写的呀 |
模版手写都可以,模版已经配置好了: |
你好 最近的 一些思考 希望能一起交流 rx 的就感觉像Promise 很像 一个一个任务的数据流水线的去执行 也可以任务失败就终止 ,最后我发觉协程确实可以解决很多问题 。 |
rx适合多任务处理的场景,看业务需求,一般项目里协程就能解决的场景可能要多些,我觉得可以尝试两者搭配着来 |
跨组件通讯我也不会优先考虑类似 消息机制的可选择性很多,而类似
其实这一点我觉得应该还是可以优化的,毕竟极少有页面真的需要注册这么多观察者。 如果使用了多Module构建的项目,使用 综上所述,你说的都是三方库上的问题,我的观点是,涉及三方库的选型的问题就不是问题,因为每个人都有不同的理解,这个看个人爱好就可以了。 另外,从思想上来说,我认为 |
支持你去掉databinding,除了bug的问题外,其实以下这些方面也是考虑的因素:后期代码维护,热补丁,app的编译大小,闪退快速定位等等,都是datebinding可能存在的潜在的风险; |
首先表达对楼主开源和务实精神的支持,这里谈一谈我对于楼主livedata和RxJava观点的看法,livedata是Google提供的一个套件,体现了Google在处理响应式变更上的思路,相比于一般的响应式UI体系,Android需要考虑自身的生命周期问题,livedata将这些内容都做了封装,可以认为官方指导了一下在Android上应该如何去做响应式数据封装。而RxJava最开始的意图是优雅的处理异步问题,随着在创建响应式业务模型的问题上(简而言之是创建特定的数据流变化和相关事件订阅)体现出优势,被广大开发者接受并推广,Google15年推出databinding,随后才逐步推出JetPack中的各种套件,当时RxJava(RxAndroid)已经广泛使用了,所以Google认可他并提供相关的扩展是正常的。 当然,用任何的异步处理框架去实现响应式数据都是可以的,我记忆中Google推出jetPack时提到过,有很多用户抱怨Google没有像Apple在iOS的生态中那样,为开发者提供各种成熟的开箱可用的套件,大多数都是靠社区和广大开发者维护,所以Google痛定思痛决定对自家人好点,也弄点东西给大家用用。 而databinding呢,他的设计理念是为了让写响应式UI设计更简单一点,并不利于View的复用。 |
@qingmei2 事实上,数据驱动 UI 和 RxJava 都属于函数式编程的应用,函数式编程主要是为了解决 过程的一致性问题,也即,只有一个入口,只有一个出口,过程不被外界从旁干预,也不对外产生副作用。 DataBinding 本质上是一个外挂,它不是一个强约束的框架,没有彻底迫使 原视图系统 贯彻函数式编程的思想,使得视图树在构建后,仍然可以通过 mBinding 拿到视图实例。 但只要理解了函数式编程思想的目的 —— 解决过程的一致性问题,就能恰到好处地使用 DataBinding。 数据驱动 UI 框架,在解决 视图调用 的一致性问题 上,是不可替代的,比如 “横竖屏布局控件存在差异” 这种情况,以往需要手动判空来解决 null 安全问题,但手动判空并不可靠,因为视图实例一旦能在 Activity 中拿到,就会不受控制地遍布在各种方法中,也即这个方法判空了,另外的方法却可能疏忽。 而目前来说,只有 DataBinding 能妥善解决这个问题 —— 通过数据来驱动 —— 视图在?那么就能被绑定到的数据驱动;视图不在?ok 没问题,啥事也没有,不会有视图调用的 null 安全问题。 所以个人认为,从软工安全角度来看,DataBinding 的存在有其不可替代的因素,仍然值得存在于 MVVM 架构中。唯一可与之竞争的,只有更加纯粹和强约束的数据驱动框架:Jetpack Compose。 |
DataBinding的一些思考 所以 我觉得就是2个方案 一个是UI数据绑定代码写在布局文件XML里面。另一个方案是在代码里面获取UI的reference,然后在代码里面进行UI和数据的绑定。我觉得两种都可以把,具体看个人喜好 |
不知道什么时候能看到大佬的databinding+livedata+协程版本 |
|
移除DataBinding 的原因是? |
对于大体量的项目而言,DataBinding的「魔法糖」是毒药(我觉得魔法糖比语法糖更适合形容它)。 对此,你可以参考南尘的 这篇文章, 随着业务复杂度的指数级上升,DataBinding最终会成为限制项目架构的瓶颈,同时多人开发模式下也会面临滥用的问题。 |
Databinding XML里逻辑IDE没什么检查提示,逻辑很难找不喜欢 还是kotlinx,真香 |
有个小问题想请教一下大佬,为什么_stateLiveData每次post的时候都使用copy而不直接创建一个新的对象,不改变的值使用默认值 |
liveData最重要的其实是生命周期.使用他可以减少太多内存泄漏了 |
不知道楼主是否有关注最新的compose Ui,我越来越坚定的认为目前的什么基于Activity的开发方式后面都会被干掉,转而走向与React、Vue一样响应式的组件化开发,mvvm这一套也注定是一个时期过渡品,在接触了Web的开发之后,我发现app的开发思路很多都是从web借鉴过来的,目前React和Vue的开发(Flutter同)方式真的非常优越 |
dagger是为了减少模板代码,以及方便测试用的 |
更新日志
Update :2020/ 8/ 27
Paging3
;感谢DaQinShgy对本次更新相关功能的贡献 🎉。
Update: 2020/ 7/ 3
Kodein
, 使用Dagger-Hilt
;Activity
和Fragment
库。Update: 2020/ 1/ 15
...
...
更多早期的更新日志都已经随风飘逝......
The text was updated successfully, but these errors were encountered: