Kotlin搭建基础框架—为什么要选MVP

A、首先我的工程目录

微信图片_20181017171115.png

(1)简单介绍MVP开发模式

在传统的Android 应用开发中,View层(Activity,Fragment或者自定义View)承载太多的责任,它不仅仅要完成界面的更新,复杂动画的渲染等UI相关的操作,还要处理各种业务逻辑,网络请求获取数据,将用户输入保存到本地数据库中。由于职责不单一,View层的代码显得很庞大,一个Activity或者一个Fragment的代码可能要上千行,随着一个类的代码量逐渐增加,维护和升级将变得越来越困难,牵一发而动全身,为了更好地组织并对代码进行分层大户人家,则必要引入MVP模式。

(2)MVP是什么

MVP的全称是Model、View、Presenter.它将整个应用分为三层:

微信图片_20181017171503.png

(3)MVP的开源实现(通过对比来进行使用)

a、Android-Architecture(Android 体系架构)

https://github.com/googlesamples/android-architecture

Google官方出品你的Android UI框架的一些例子,几乎都是MVP架构的实现,我们可以根据自己的业务需求进行选择和参考。

Google通过一个TODO类来讲解如何使用一些第三方库:

b、TODO-MVP(MVP架构基本实现)

https://github.com/googlesamples/android-architecture/tree/todo-mvp/todoapp

MVP架构的基本实现,没有使用任何其他的架构框架,通过纯手工依赖注入实现从本地数据源和远程数据源获取数据的Repository,使用回调方法实现异步任务.

c、TODO-MVP-Loaders(Loader机制)

https://github.com/googlesamples/android-architecture/tree/deprecated-todo-mvp-loaders

在TODO-MVP的基础上,通过Loaders机制从Repository中获取数据,使用Loaders机制好处:
提供异步加载数据的能力,因此Repository不需要回调方法
监听Repository的数据变化,并在数据变化是发送新的结果
在配置变化导致界面重建时,Loaders机制会重新与最后的Loader建立联系

d、TODO-MVP-Clean(在TODO-MVP基础上,参考Clean架构思想)

https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean
在TODO-MVP的基础上,参考Clean架构的思想,在表现层和Repository之间增加了一个Domain层,在整体上将App分为三个层次。
MVP层:也成为表现层,包含View和Presenter.
Domain层:业务逻辑层,提供名为use cases或者interactors的类来表示所有可能从Presenter发起的动作
Repository层:数据存储层

e、TODO-Databinding

https://github.com/googlesamples/android-architecture/tree/deprecated-todo-databinding

在TODO-MVP的基础上,结合Data Binding 函数库实现师徒和数据的绑定,它并没有严格遵循MVP或者MVVM模式,因为结合使用了ViewModers和Presenter.
Data Binding 函数库的引入,减少了很多样板代码的使用,实现UI元素和数据的绑定

使用布局文件实现数据和UI元素的绑定。
事件也会和一个动作处理器绑定在一起
监听数据并在需要时自动更新。

f、其它开源参考实现

androidmvp

https://github.com/antoniolg/androidmvp

mosby

https://github.com/sockeqwe/mosby

nucleus(我只用过这个)

https://github.com/konmik/nucleus

EffectiveAndroidUI

https://github.com/pedrovgs/EffectiveAndroidUI

MvpCleanArchitecture(貌似没有更新了)

https://github.com/glomadrian/MvpCleanArchitecture

(4)MVP的好处

使用MVP组织代码架构,并对代码实施分层管理,好处


微信图片_20181017172751.png

(5)MVP存在的问题

微信图片_20181017172844.png

当然瑕不掩瑜,就选MVP了,当然选的是最基础的,是对MVP的基本实现

你可能感兴趣的:(Kotlin搭建基础框架—为什么要选MVP)