MVC、MVP、MVVM 结构区别

项目地址 :https://github.com/ivacf/archi

这个项目是从网上搜索到的一个项目使用了三种写法,试着解析一下其中原理 ,上传时间是两年前,可见大神两年前就已经掌握了三种架构…………

首先贴出MVC模式包结构


mvc.png

其中
GithubService 封装了2个retrofit访问网络的get方法和retrofit的create方法
Repository 是一个实体类里边有一些属性和一些保存属性的方法 User也一样
ArchiApplication 中初始化了GithubService
MainActivity 中 是主界面 有搜索框 按钮 和展示信息的RecyclerView 点击搜索按钮加载git账号的一些信息
RepositoryActivity 是知识库界面 是点击RecyclerView 的条目跳转过来的 显示一些知识库相关的数据 textview 和图片等资料
RepositoryAdapter 是MainActivity中RecyclerView 的适配器 决定条目界面的显示内容

接下来分析MVP模式包结构


mvp.png

model是MVP中的实体类
GithubService Repository User 内容没有变化
Presenter 是一个接口有两个方法 attachView 和detachView 附加视图 分离视图

MainPresenter 实现了Presenter 的两个方法 并且将Presenter 的泛型设置为 MainMvpView ,MainMvpView 也是一个接口 里边有三个方法 显示库 显示消息 显示进度指示器,MainPresenter 里封装了一个网络请求 将数据从MainMvpView的对象发送到方法中

RepositoryPresenter 实现了Presenter的两个方法并且将Presenter 的泛型设置为 RepositoryMvpView,RepositoryMvpView 也是一个接口封装了1个显示方法 ,RepositoryPresenter 封装了一个展示方法,RepositoryPresenter 里封装了一个网络请求 将数据从RepositoryMvpView的对象发送到方法中

MvpView 封装了1个上下文

MainActivity实现了MainMvpView这个接口 重写了3个展示的方法 。onCreate方法中创建了MainPresenter对象 将this 传入附加试图的方法中,搜索按钮点击事件将搜索框的内容 发送给Presenter对象的 加载库的方法执行,搜索框的一个方法也交由Presenter对象执行。在重写MainMvpView的接口中 初始化了RecyclerView并设置了adapter,adapter的数据是MainPresenter 通过继承MainMvpView 实现方法将数据传给 MainMvpView 方法的 ,MainActivity也继承了 MainMvpView 重写方法获得的数据

RepositoryActivity 实现了RepositoryMvpView的接口重写了方法,onCreate方法中创建了RepositoryPresenter对象 将this 传入附加试图的方法中,将本activity的数据发送给presenter方法,presenter方法通过RepositoryMvpView 的方法将数据传递给activity进行显示,同时上个界面跳转的时候也将RecyclerView中的数据通过Intent传递给了本activity

ArchiApplication 和RepositoryAdapter 内容与mvc一样

总结起来mvp 模式就是 将所有数据展示方法封装到 Presenter 接口中并由 MainPresenter 实现p接口 编写业务逻辑,并将数据交给view的接口 MainMvpView 的方法中(P的泛型是V接口),最后由Activity调用p的方法,实现view的接口 并进行数据展示。

接下来分析MVVM模式包结构


mvvm.png

GithubService、Repository、User 这三个类内容均与其他模式一样。

MainActivity实现了 MainViewModel 的数据改变监听接口,当数据改变就刷新列表 ,并持有了VM对象,通过 MainActivityBinding 获取视图控件,在xml文件中使用了 variable 和data 标签

MainViewModel 中通过ObservableInt 获取各个控件 显示隐藏的状态 提供了设置数据改变接口的方法,提供了点击查询git信息的方法与输入框的监听方法。

ItemRepoViewModel内有一些属性设置方法和选择条目跳转方法

RepositoryActivity也是通过DataBindingUtil.setContentView 获取 RepositoryActivityBinding对象 获取视图控件

RepositoryViewModel中对各个控件进行 显示隐藏的设置 和请求网络数据并设置给控件展示

总结起来MVVM模式就是 在View中 通过DataBindingUtil.setContentView 设置视图,在VM中处理逻辑与展示界面。

数据绑定框架——Data Binding Library 这个类以前没有用过还需要研究一下。

https://www.jianshu.com/p/ba4982be30f8 文档

简书有大神已经写好文章了 不过对于mvvm感觉对于mvc的提高并不大 如果碰到mvvm项目再研究吧

偶然发现它的gradle文件进行了统一配置,项目根目录下创建.gradle文件


gradle1.png
gradle2.png
gradle3.png

这样配置可以统一是设置各个Module的版本号,便于管理,也防止引入其他module 不知道版本号

实现版本统一管理的方法有很多,可以看一下这位大神的文章

https://blog.csdn.net/gao_chun/article/details/58105089

嘻嘻,拜了个拜

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容