这个项目是从网上搜索到的一个项目使用了三种写法,试着解析一下其中原理 ,上传时间是两年前,可见大神两年前就已经掌握了三种架构…………
首先贴出MVC模式包结构
其中
GithubService 封装了2个retrofit访问网络的get方法和retrofit的create方法
Repository 是一个实体类里边有一些属性和一些保存属性的方法 User也一样
ArchiApplication 中初始化了GithubService
MainActivity 中 是主界面 有搜索框 按钮 和展示信息的RecyclerView 点击搜索按钮加载git账号的一些信息
RepositoryActivity 是知识库界面 是点击RecyclerView 的条目跳转过来的 显示一些知识库相关的数据 textview 和图片等资料
RepositoryAdapter 是MainActivity中RecyclerView 的适配器 决定条目界面的显示内容
接下来分析MVP模式包结构
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模式包结构
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 这个类以前没有用过还需要研究一下。
简书有大神已经写好文章了 不过对于mvvm感觉对于mvc的提高并不大 如果碰到mvvm项目再研究吧
偶然发现它的gradle文件进行了统一配置,项目根目录下创建.gradle文件
这样配置可以统一是设置各个Module的版本号,便于管理,也防止引入其他module 不知道版本号
实现版本统一管理的方法有很多,可以看一下这位大神的文章
嘻嘻,拜了个拜