Android 三大框架 - MVC、MVP、MVVM

回想一下,我在高中的时候开始正式接触Android的旗舰手机,那时手里拿着的是彡※的一代旗舰S5,惊叹着Android旗舰流畅和彡※黑科技的同时,也深受着当时Android用久必卡的烦恼(穷B学生一机用三年);从官方Android4.4到官方5.0再到官方6.0,再到忍受不了官方系统的负优化和简陋(choulou)的UI,去刷带OneUI的官改包,最后到极简的魔趣、CM(后来莫得了)、LineageOS的7.0、8.0,感受到了Android平台的可拓展性和Android的不断进步,但当时也没想着读计算机(原志愿是生科或者医学的考不上)。

在大一下的暑假,ssmc实验室招人,需要掌握一些Android开发的技能,于是开始翻看郭霖的第二行代码,没想到的是因为大二的繁忙的课程以及一些磨人的比赛,第二行代码一直敲到了现在,中间断断续续的看了又忘,用的时候再去翻,在GitHub和各大博客的帮助下也用Android写了几个小作业,无奈花在Android上的时间太少,加上Android版本的迭代速度越来越快、新的框架的出现等等,我发现我的知识落后了太多,于是现在开始接触新一点的技术、框架等,接下来也会将我接触到的东西写成一系列的文章,用于加深对框架的理解,不至于像之前那样每次用都要翻!

啰嗦了两大段之后,现在进入正题。上个学期数据库期末作业按照MVP架构写了一个Android端的小商品程序,不知道是我手撸的MVP过于冗余还是什么原因,这个小的APP写的太烂了,我觉得我必须跟上技术迭代的脚步,学习一下当前最火的MVVP。

国际惯例,正文开头先讲一下我对MVC、MVP、MVVM的认识(网上很多大牛写的很好,帮助了我的理解):

  • MVC

在MVC架构里一般使用Activity作为Controller,根据用户在界面的操作,做出相应的相应,如弹出提示、向Model获取数据等,而Model负责业务逻辑对应的数据模型。但是因为Android里Activity本身就是一个视图,在MVC里面既控制布局,又控制业务逻辑,搞的View和Controller比较混乱,实际上写起代码来View和Controller都基本在Activity里,这会造成Activity过于臃肿,不利于后期的维护和升级。

Android 三大框架 - MVC、MVP、MVVM
MVC架构
  • MVP

在数据库的期末作业里,我用PHP实现了简单的商品后台,用手机APP进行商品的增删查改,其中手机APP就是依据MVP架构实现的;

在MVP里,Model的角色没有太大的变化,Activity将完全扮演View的角色,新增了一层Presenter结构,在View里,得到用户的登录操作,获取edittext里的账号和密码,传递到Presenter层,Presenter层再向负责登录的Model发送核对账号密码的请求,Model则通过和服务器建立联系,获得账号密码的核对结果,并将结果下发到Presenter,然后Presenter负责通知View去告诉用户登录的结果。这样就能避免Activity过于臃肿,在MVP架构里,Activity只需要负责收集用户输入、向用户输出,例如,登录等业务逻辑完全不用管,只需要向用户收集登录信息,展示登录结果,后期如果界面更新也不会影响到后台的逻辑,而后台的逻辑进行优化更新也基本不需要对View进行更改,我在完成期末作业的时候前端页面进行了几次大更改,而后台的逻辑处理基本不需要更改!


Android 三大框架 - MVC、MVP、MVVM
MVP架构

这大概就是MVP的工作流程了,整个项目的结构如下图:

Android 三大框架 - MVC、MVP、MVVM
数据库的数据展示APP

Android 三大框架 - MVC、MVP、MVVM
APP演示

想要了解这个作业详细情况的朋友,可以跳转到这个链接:https://www.jianshu.com/p/d986ed5159cc

  • MVVM
    参考codelabs.developers.google.com里2019安卓开发峰会的Demo,我写了(差不多照抄)了一个基于ViewModel、Room、LiveData等JetPack组件,深刻体会到这些组件的强大,后期也会加强对这些组件的源码学习!
Android 三大框架 - MVC、MVP、MVVM
Android Jetpack组件推荐的使用项目架构

由于我是初学者(教程没用其他的),利用Retrofit从远程数据源获取数据的部分被砍掉了,程序的框架如下图所示:


Android 三大框架 - MVC、MVP、MVVM

这和MVVM架构的图有异曲同工之妙:


Android 三大框架 - MVC、MVP、MVVM
MVVM

在这里附上关于我的MVVM Demo的链接,感兴趣的朋友可以了解一下:

代码链接:https://gitee.com/wuxuxing/SimpleMVVMDemo
文章链接:https://www.jianshu.com/p/e48fda9aadc3

好啦这就是关于MVC、MVP和MVVM三大框架的简介和简单实操了,谢谢大家的观看~