开发15年老码农:如果重新开始,你会选择了解MVC, MVP, MVVM吗?

需要的小伙伴可以私信【核心笔记】,我分享给你!或者直接点击下面链接领取

Android学习PDF+架构视频+面试文档+源码笔记

如果你有其他需要的话,也可以在 GitHub 上查看,下面的资料也会陆续上传到Github

330页Android学习核心笔记

在这里插入图片描述

桌面应用程序的 MVC

程序越来越复杂,Bug越来越多,没办法, 大家只好去求编程上帝。

上帝说: 想从困境中走出来,一定要实现关注点分离(Separation of concerns)

没人能够理解。

上帝解释道:“ 你们人脑同时能处理的东西是有限的, 所以要把一个大系统给分解,变成几个相对独立的部分,这样我们的大脑每次只关注某一方面,暂时忽略其他的,就能够掌控了。”

没人知道该怎么分解。

上帝只好想了一个办法, 把关注点分离的理论给具体化,这个办法就是MVC。

上帝告诉人类:

M 表示 Model , 专门用来处理业务逻辑,不干别的事情。

例如在那个薪水计算系统中。计算一个人的薪水,五险一金,个人所得税等等。

V 表示View, 专注页面布局和数据显示。

例如把Button放置到某个位置,把总收入显示到一个文本框,把税金显示到另外一个地方。

C 表示Controller 翻译用户的输入,操作模型和视图。

例如,用户在界面点击了一个“计算”的按钮,View 把计算的请求传递给Controller (很明显View需要知道Controller,换句话说,需要持有Controller的实例),Controller找到或者创建Model,执行业务逻辑:计算薪水。

计算的结果该怎么展示呢? 人类问道。

上帝胸有成竹: 可以让Model 去通知View。

Model需要持有View的实例(当然也可以通过观察者模式),调用View对应的方法。

例如: View中可能有一个onResult的方法, 让Model去调用,在调用的时候把一个参数对象Salary传递过来,不就可以展示数据了吗?

// View的方法,被Model调用:

public void onResult(Salary salary){

//把个人所得税(salary.getTax()) 展示到一个文本框

//把净收入(salary.getNetPay()) 展示到另外一个文本框

}

画成流程图的话是这个样子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PyGKqFK6-1588765624380)(https://upload-images.jianshu.io/upload_images/22459598-9a0be7dc6f09a9c0?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

大家都觉得MVC大法好,纷纷开始使用。

MVP

时间久了以后,人类就觉得不爽了,因为在这个MVC中,依赖太多:

View 依赖Controller和Model

Controller依赖View和Model

Model 和View的关系虽然很弱, 但是也需要某种方式来通知View进行数据更新。

人类说:“他们之间的耦合还是挺紧密的啊,亲爱的上帝,能不能改改?”

上帝觉的人类还是挺有上进心的,决定继续施以援手: “这样吧, 可以改变一下Controller, 把Model和View完全隔离开,让他们单独变化。”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DniclrfR-1588765624382)(https://upload-images.jianshu.io/upload_images/22459598-3a1ed2ad3f8db895?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

上帝把Controller 改了个名称,叫做Presenter, 把整体命名为MVP。

在MVP当中,View只知道Presenter, 不知道Model 。

计算流程和MVC差不多,用户点击了“计算薪水”按钮, View去调用Presenter, Presenter操作Model , Model 中进行业务计算。 关键点是,Presenter去更新View

//Presenter 的方法,被View调用

public void calculateSalary(){

//调用Model计算薪水

view.showTax(xxx); // 调用View显示所得税

view.showNetPay(xxxx);// 调用View净收入

}

但是Presenter还是需要调用View的方法,也就是说Presenter对View有依赖,这样Presenter就没办法单独做单元测试,非得等到界面做好以后才行。

于是上帝又做了一点改进,让View层提取出接口,Presenter只依赖这个接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DHZNc4OE-1588765624384)(https://upload-images.jianshu.io/upload_images/22459598-d296abd05cc281fb?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

这样Presenter不用依赖真正的界面就可以测试了,并且也增加了复用性,只要View实现了那个接口,Presenter就可以大发神威。

MVVM

使用了一段时间MVP以后,永不满足的人类又觉得不爽了, 因为让Presenter调用View的方法去设置界面,仍然需要大量的、烦人的代码,这实在是一件不舒服的事情。

人类突发奇想: 能不能告诉View一个数据结构,然后View就能根据这个数据结构的变化而自动随之变化呢?

上帝看到人类思考了,表示了赞赏。

他说,我来送你们一个叫做ViewModel的东西,它可以和View层绑定。 ViewModel的变化,View立刻就会变化。

人类问: ViewModel? 里边有什么东西?

上帝说: 拿你们的薪水计算为例, ViewModel 差不多这样:

public class SalaryViewModel{

String grossSalary; //税前收入,和View中的相关字段对应

String netSalary; //净收入,和View中的相关字段对应

String tax; //个人所得税,和View中的相关字段对应

boolean isCalculating; // 一个标志位,表示正在计算

String errMsg; // 如果出错的话,记录出错消息。

}

当用户在界面上点击“计算”按钮的时候, 你们需要设置一个SalaryViewModel中的标志位:

salaryViewModel.isCalculating = true;

这样View 中就可以自动给用户展示一个消息:“正在计算…”

当薪水计算完成的时候, 如果没有错误,SalaryViewModel 中grossSalary, netSalary,tax等属性就有了值。 与此同时View 中对应的内容也会更新, 不用你们手工去设置, 很方便吧?

如果计算过程出错, SalaryViewModel 的errMsg 会保存出错消息, 同样,View中会自动把这个错误消息给显示出来, 很智能吧?

人类说:“怎么可能这么智能呢? 这里的ViewModel 好像和View没有什么关系啊? 到底该怎么绑定啊?!!!”

上帝笑了: 你们可以开发一个框架嘛? 让两者绑定起来不就行了?

人类没有办法,只好自己动手。

(注:实际上微软的WPF和Silverlight, Android等框架和系统都可以实现View和ViewModel之间的映射和绑定)

Web应用程序的MVC

时间过得飞快,人类发明了互联网,Web应用程序如雨后春笋般崛起,B/S(浏览器-服务器)开始大行其道。

用户通过浏览器发出GET,POST请求,服务器端进行处理,处理完以后生成HTML给浏览器。

无论什么操作,都是对服务器端URL的访问。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
]

[外链图片转存中…(img-R7s7xmyw-1715904078635)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 29
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值