WanAndroid
WanAndroid copied to clipboard
程序或者对框架有疑问的可以在这里回复我
—————— 问题我会尽快回复,互相交流,互相学习————————
请问 为什么要对viewmodel 的方法写注解然后用VMrouter去拿方法?为了解耦吗 我欠考虑的第一想法就是activity/fragment持有相应页面的viewmodel就可以了,这里有什么特别的考虑吗
ps 项目很不错,能学到很多东西,start有点少了
@est7 其实这里出于解耦考虑 当初也考虑一个问题 因为我们在框架整体使用时候发现一个问题 就是repository这个仓库管理类 经过实际研发 经常出现忘记初始化那个lifeowner 这个很重要的东西,不管我用不用协程或者rxjava,这样使用产生不好的使用体验 所以后来觉得采用了这个“路由+注解”的写法 。第二点,初期版本是用于测量kotlin-reflect性能才写得 ,结果还是一个缺陷来的 ,这个包有个严重问题第一次反射极度慢,你可以自己尝试对比一下java-reflect,后来应该被我换掉了。这种解耦后,不再需要手动init,但是后来这个库抽取核心后,给了同事使用,结果出现到了InjectOwner这个注解忘记写。所以这种写法还是不完美。
请教以下作者, @ShowMeThe :
为什么我看 setting.gradle 里并没有导入 buildSrc 这个模块, 但其他模块中的 build.gradle 却可以引用 Dependencies.kt?
@ViShadowFiend 使用参考一下这篇文章https://handstandsam.com/2018/02/11/kotlin-buildsrc-for-better-gradle-dependency-management 其实gradle跑得时候会检查这个buildSrc这个目录的,并进行构建的 文档如下:https://docs.gradle.org/current/userguide/organizing_gradle_projects.html#sec:build_sources 而且这个目录名字一定是buildSrc
@ViShadowFiend 第一次构建时候可能会失败 国内网络环境比较复杂 可以在buildSrc/build.gradle.kts下加这两句 repositories { google() jcenter() } 如果还是失败 甚至可能还要加入国内的镜像
@ShowMeThe 非常感谢! 之前一直觉得 ext 这种方式 ide 支持不好, 不能跳转与自动补齐, 原来还有这种方式, 学习了!
@ViShadowFiend 这种dsl的写法也不能跳转吧?
@ViShadowFiend kotlin+buildSrc可以跳转的 自动补全也可以 ,反过来在Dependencies.kt里ctrl+左键 能看到哪些build在用的
VMRouter类有错,需要看最新代码,和ReadMe的解析
CallResult中的makeCall的主要作用什么啊? @ShowMeThe
@dream-hang 把仓库内的所有结果利用LiveData post 发出去,因为仓库不持有任何view,而你又不想单纯初始数据 还有别的操作放到了Activity 那就用makeCall 把完整的Result<T>发回去
@dream-hang 而且按照正确操作 仓库也不能有toast和dialog的 我只是为了方便使用 用了弱引用而已 仓库只是一个拿数据和处理数据的地方 不应该有具体view的内容
感谢回复。理解您的想法了。还有个疑问。如果网络请求有异步流的需求的时候。就是一个接口需要其他接口都请求完成后才能继续请求。按照您的CallResult封装怎么处理呢?在您的项目中学到了很多。十分感谢。 @ShowMeThe
@dream-hang 1、如果仅仅是第一个接口的结果里某个数据是第二接口的入参,而无增加外来的入参时候可以直接调用不成问题,2、如果涉及其余更多输入的入参,按目前的CallResult方案不能满足需求,你必须需大改 用async 结合 await这种方式另外写一个封装,因为你还需要单独从第一个接口冲提取某个元素+新增元素去再次调用某接口,也可以采用Rxjava2的方案 网上有很多。同时就是不太建议后台出这种接口,影响性能同时带来维护困难等等。
@ShowMeThe 十分感谢。