Skip to content
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

【 提问须知 】 #71

Open
KunMinX opened this issue Jun 19, 2021 · 1 comment
Open

【 提问须知 】 #71

KunMinX opened this issue Jun 19, 2021 · 1 comment

Comments

@KunMinX
Copy link
Owner

KunMinX commented Jun 19, 2021

如有 bug,请另外 new 一个 issue ⚠️⚠️⚠️

本项目开 issue 规范:

  1. 有任何 bug 都欢迎及时开 issue,我看到后予以处理。
  2. 如有使用上的疑问,请先认真阅读 Readme 和源码 sample,在没有找到答案后,另外开 issue。
  3. 如开 issue 是为了发表个人见解,请务必 客观、具体、严谨;严禁草率、乱入、带节奏:

务必注明观点所对应的场景,并附上完整可复现的代码,

不然缺乏一致的前提依据来有效交流!

任何缺乏实证依据和因果逻辑的泛泛而谈,都可能对其他使用者造成困扰。

在发表个人见解前,请先确保自己认真阅读过源码。这是对自己、对作者、对其他读者最起码的尊重。

@KunMinX KunMinX pinned this issue Jun 19, 2021
@KunMinX
Copy link
Owner Author

KunMinX commented Jun 19, 2021

本质概括一览

过去两年,基于深度思考,以及基于对大量样本的追踪和反思,我们确立下来并广泛传播的 “本质概括” 包括但不限于:

Jetpack 架构组件本质:

Lifecycle 的本质是解决 “生命周期管理” 的一致性问题

LiveData 的本质是解决 “跨域消息同步” 的一致性问题

ViewModel 的本质是解决 “状态保存恢复” 的一致性问题

DataBinding 的本质是解决 “视图实例的 null 安全” 的一致性问题

Navigation 的本质是解决 “路由初始参数恢复” 的一致性问题

若要说它们有什么共性的话,就是透过各种方式 实现样板逻辑的 “内聚”,从而达到规避一致性问题的目的。

文章来源

《是让人耳目一新的 Jetpack MVVM 精讲》

《架构组件 “一致性问题” 全面解析》

·

《为你还原一个真实的 Jetpack Lifecycle》

《柳暗花明 Jetpack Navigation 打开方式与缺陷分析》

《LiveData 鲜为人知的 身世背景 和 独特使命》

《在页面开发中 左右逢源的 Jetpack ViewModel》

《从被误解到 “真香” 的 Jetpack DataBinding》

声明式 UI 本质:

声明式 UI 的本质是函数式编程,

函数式编程的基石是纯函数,

纯函数的特性是 只有一个入口、只有一个出口,且无副作用,

声明式 UI 正是通过对视图实例的屏蔽,来规避 “视图实例的 null 安全” 的一致性问题,

也即声明式 UI 可用于替代 DataBinding 等框架,

如果公司项目执意使用 Java,为了规避 null 安全问题,务必使用 DataBinding 等框架,

如果允许使用 kotlin,那么当下 kotlin + ViewBinding 的组合是更优解

文章来源

《一通百通 "声明式 UI" 扫盲干货》

《从被误解到 “真香” 的 Jetpack DataBinding》

架构模式本质:

MVP 的本质是基于 “依赖倒置原则” 实现组件的可替换,适合非页面开发场景的编写(具体可参见我开源的 Linkage-RecyclerView 中万用的适配器),

MVVM 的本质是基于 “数据绑定” 来解决视图实例 null 安全一致性问题,也即它是专用于页面开发的模式,

当我们剔除了 DataBinding 框架而使用 Compose 或 kotlin + ViewBinding 等方式来规避一致性问题,虽然效果是等同的,但已不能称作是 MVVM。

文章来源

《如何让同事爱上架构模式、少写 bug 多注释》

《提神醒脑 MVP、MVVM 关系精讲》

LiveData 的那些事:

LiveData 的设计存在缺陷。

一方面它提供了面向 “事件” 的设计,

这使得我们萌生了通过 “决策权收紧” 的结构(也即所谓 “唯一可信源”)来确保 “消息分发可靠一致” 的目的成为可能,

另一方面它权当自己是 “状态”,而仅提供粘性的设计,

正是这种令人迷惑的设计,导致了所谓 “数据倒灌” 现象的发生。

要想弄清楚 “唯一可信源” 和 “数据倒灌”,得先正确理解和区分 “状态” 和 “事件”。

文章来源

《唯一可信源 读写分离设计 独家解析》

《LiveData 数据倒灌 背景缘由全貌 独家解析》

开源项目一览

包括 腾讯音乐、字节跳动直播 在内的诸多厂商或团队,参考过或正在使用我们开源和维护的《脚手架》等项目,

https://github.com/KunMinX/Jetpack-MVVM-Scaffold

解决 LiveData 数据倒灌问题的 UnPeek-LiveData

https://github.com/KunMinX/UnPeek-LiveData

解决 Navigation 转场卡顿的 Smooth-Navigation

https://github.com/KunMinX/Smooth-Navigation

我和 Flywith24 合作开发维护的 Jetpack MVVM - Java to Kotlin 示例

https://github.com/Jetpack-Missionary/Jetpack-From-Java-To-Kotlin

作为依赖倒置原则 MVP 的 Linkage-RecyclerView

https://github.com/KunMinX/Linkage-RecyclerView

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant