公司网站建设设计,网站后台更新文档,wordpress 2016主题,东莞市企业网站建设哪家好前言很高兴见到你#xff01;我是《Jetpack MVVM 精讲》的独立原创作者 KunMinX#xff0c;GitHub star 8.7k#xff0c;专注于深度思考和 Jetpack MVVM 的分享。关于 MVP 和 MVVM 本质和区别的文章#xff0c;本来我是不想写的#xff0c;因为经过长达一年的耳濡目染 和对… 前言很高兴见到你我是《Jetpack MVVM 精讲》的独立原创作者 KunMinXGitHub star 8.7k专注于深度思考和 Jetpack MVVM 的分享。关于 MVP 和 MVVM 本质和区别的文章本来我是不想写的因为经过长达一年的耳濡目染 和对方法论的试炼相信 但凡沉下心阅读过《重学安卓》体系化文章的读者多已练就 透过表象迅速抓住本质 的稀缺能力。专栏每天都有新的读者加入然而没想到的是1 年了仍然时不时的会被咨询、或是在各个社区看到人们众说纷纭地在谈论 MVP 和 MVVM 谁“好”谁“坏”。并不是每一个提问都值得被回答爱因斯坦说“提出正确的问题问题就已解决了一半”。换言之并不是每一个提问都值得被回答。一次提问所包含的信息量其实远远超出内容本身。透过提问者的提问几乎可以瞬间感知到提问者对事实状况的掌握程度并由此来决定到底值不值得继续交流。与“高”质量提问者的交流 让人感到如沐春风 —— 几句话就能自己先把背景交代清楚然后就某个细节提出自己的困惑 —— 这让我不免想要与之多聊几句把我知道的毫无保留地分享出去。反之“低”质量提问 让人感到 不舒服甚至不对劲 —— 明明不遗余力地在多处 划重点 反复交代明明白纸黑字写得清清楚楚甚至段落、链接给他指出来却视而不见就好像从未发生过。注我从不在技术交流中使用 “高”、“低”、“好”、“坏”、“轻”、“重” 之类的主观描述此处只是以多数人方便理解的方式来介绍。文中使用到的主观描述一律加上双引号。更有甚者为了满足抬杠的快感不惜浪费彼此的时间 ? ... ?本质和区别我只说一遍事实上我并不会去判断来者是否是来抬杠而只须透过对方所说的话即可瞬间判断对方说的是事实还是自顾自地扯淡 —— 你没法和一个前来扯淡的人交流你会发现 这种对话往往 存在巨大的代沟并且抬杠者无意谋求和缝合对事实的理解他本来就是为了 “来的快” 的精神胜利而来。事实即 就事论事事实必有特定背景和目的来约束。一切脱离事实特征的意见和观点都是瞎扯淡没有讨论的前提、不值得参与 —— ©KunMinX所以本文只写给那些 真的想搞清楚事实 的有缘人只为有缘人铺路。并且关于 MVP 和 MVVM 各自的本质及区别我就只说这么一遍所以请认真阅读。文章目录一览前言并不是每一个提问都值得被回答本质和区别我只说一遍先说结论所以二者的区别是什么Jetpack MVVM 和 MVVM 模式的关系我为什么能瞬间感知沟通质量的 “好” 与 “坏” 综上先说结论MVP 本质是广义上的架构模式适用于面向实体或虚拟用户接口的开发。它主要是在 MVC 的背景下通过 依赖倒置来解决 逻辑复用 难、实现更替 难 的问题。MVVM 本质是狭义上的架构模式专用于页面开发。它主要是在多人协作的软件工程的背景下通过只操作 ViewModel 中映射的视图数据 来刷新视图状态以此来解决 视图调用的一致性问题 从而规避不可预期的错误。所以二者的区别是什么区别就在于一个是广义上的架构你可以通过同一套逻辑去驱动不同品牌设备的实体用户接口(比如不同品牌的耳机线控)或虚拟用户接口(比如 Android 视图但存在一致性问题而不推荐)一个是狭义上的架构专用于可视化页面的开发通过解决一致性问题 来规避不可预期的错误。所以轻易地你就可发现二者分别适用于 在各自的专场下 解决不同的问题根本没有可比性更没有所谓的 谁“好”谁“坏” 之分。而且除了没有可比性二者之间其实也没任何关系MVP 的特质是 依赖倒置MVVM 的特质是 数据驱动二者没有说谁演化自谁的关系。回到刚刚所说的“根本就是 特定场景下解决特定问题 的两种截然不同的架构模式”。没有所谓的 MVVM MVP DataBinding没有的。Jetpack MVVM 和 MVVM 模式的关系Jetpack MVVM 是 MVVM 模式在 Android 开发中的一个具体落实也即它不仅仅包含了 MVVM 模式用于解决 “视图调用的一致性问题” 这一本质还兼顾了 Android 页面开发中其他不可预期的错误。正如我在《 Jetpack MVVM 精讲》中介绍到的Lifecycle 的存在主要是为了解决 生命周期管理 的一致性问题。LiveData 的存在主要是为了帮助 新手老手 都能不假思索地 遵循 通过唯一可信源分发状态 的标准化开发理念从而在快速开发过程中 规避一系列 难以追溯、难以排查、不可预期 的问题。ViewModel 的存在主要是为了解决 状态管理 和 页面通信 的问题。DataBinding 的存在主要是为了解决 视图调用 的一致性问题。它们的存在 大都是为了 在软件工程的背景下 解决一致性的问题、将容易出错的操作在后台封装好方便使用者快速、稳定、不产生预期外错误地编码。所以Jetpack MVVM 的高频核心架构组件和 iOS、WPF 的实现一定是有区别的只不过抓住本质我们就能举一反三以不变应万变。通过《事关软件工程安全 的 数据驱动 UI 框架 扫盲干货》一文的介绍我们可知DataBinding 的唯一挑战者是 基于函数式编程的数据驱动 UI 框架也即发源自前端 Elm 框架的 React、Flutter、Jetpack Compose、SwiftUI 之流。所以 React、Flutter 这种算不算 MVVM 呢其实也算。DataBinding 被换下了但视图调用一致性问题有函数式编程来解决。所以 ...我为什么能瞬间感知沟通质量的 “好” 与 “坏” 事实上在 “先说结论” 一节介绍完本质后按照惯例我是会以 “如果这样说还没有理解的话” 来引出下文开始交代 “Before” 和 “After” 的因为每天都有新的读者加入为方便新读者能够 结合自己的兴趣 随机阅读专栏几乎每一篇文章 都是以独立专辑的完整度来发行。这也是为什么我的每一篇文章都当做自己是第一次和读者见面、不遗余力地贯彻 全网独家的深度思考写作风格让每一位新读者都有机会和我注入到文章的灵魂发生交流。然而这一次我不得不小小地任性一把因为如果上述这样说了一通还是不理解的话答案早就写在以下几篇里《是 持续增量更新 的 背景缘由甜点》 的 “饭后甜点不能当主食吃” 一节 (推荐)《基本功是随时随地可受用的 深度思考秘诀》 的 “所以如何正确地思考” 一节《这是一份 简洁有力的 认知地图》 的 “认知地图” 一节还有近期在掘金开源的《独家解析 | Android 深度思考写作技巧》 的 “公式” 一节 ——这几处都有 就正确的思维方式 提供方法论依据 以及手把手示范。一旦熟悉了这套方法论那些没完没了的争论你会不会参与我想大概率不会因为你一眼就看出 这些言论中不包含基于事实的思考不过是 凭主观感觉、个人喜好 的自说自话。参与到这种扯淡中 是对自己的不尊重所以你不会参与。综上MVP 的本质是对 MVC 的依赖倒置借此来解决 逻辑复用难 以及 实现替换难 的问题因为在 MVP 下UI 逻辑和业务逻辑全在 Presenter 中写UI 和 Model 的实现可以随意替换也即如上文介绍的通过同一套 Presenter 中的逻辑可以驱动不同品牌不同型号的耳机的线控。(注意 UI 的全称是 “用户接口”台湾的术语更准确叫 “用户介面”。UI 不是狭义上的页面UI 就是 UI)MVVM 的本质是对 View 数据的映射借此来在软工背景下解决 视图调用的一致性问题。MVP 和 MVVM 二者的区别在于前者是广义的架构模式普遍适用、抓大放小后者是狭义上的架构模式专用于页面开发可以解决例如 视图调用的一致性问题来规避不可预期的错误。也即 MVP 和 MVVM 本质上毫无关系没有谁演化自谁。Jetpack MVVM 是 MVVM 模式在 Android 下的一个落地也即除了解决 视图调用的一致性问题还因地制宜地解决了其他一致性问题从而规避各种不可预期的错误让软件开发的工作得以完成得又快又好。这样说你理解了吗版权声明本文以 CC 署名-非商业性使用-禁止演绎 4.0 国际协议 发行。Copyright © 2019-present KunMinX文中提到的 关于 “MVP 和 MVVV 各自的本质及区别” 的具体描述、”用户介面与耳机线控“ 的举例、”DataBinding 与函数式编程数据驱动框架的关系“ 的具体描述、”Jetpack MVVM 和 MVVM 关系“ 的描述、”Lifecycle、LiveData、ViewModel、DataBinding 等架构组件的存在意义“ 等多处 对特定现象及其本质的概括均属于本人独立原创的成果本人对此享有最终解释权。任何个人或组织在转载全文或引用本文中上述提到的 描述、举例或本质概括 时须注明原作者和出处。未经授权不得用于洗稿、广告包装等商业用途。