Android架构

1、mvc

view层:对应的xml视图文件

controller层:对应的时Activity

Model层:针对业务模型,建立的数据结构和相关的类

总结:

MVC中View接受事件,并调用Controller来操作Model,同时,当Model实例的数据发生变化后,Controller再更新界面

在传统的开发中Activity俨然既充当了Controller又充当了View的作用.既需要接受用户响应操作Model,又要更新界面.
这样做有一个好处就是数据的更新变得很简单,但是缺点也十分明显,Activity是非臃肿,后期不好维护

 我们分析下事件的流向 
button点击事件的触发:View→Controller 
获取用户信息事件的触发:Controller→Model 
绑定用户信息到View:Controller→View 

用户点击事件的处理应该是属于view的需要去实现的,而现在放到了controller中,

2、MVP

举个很简单的例子,我们区参观吃饭,坐下点菜,服务员会把菜单给我们让我们点菜,点好之后,服务员会告知后厨,需要做什么菜,后厨把菜做好之后,服务员会把菜端给我们,这一次完成了  V--->P---->m,m--->p----v的整个过程,这就是三层之间的关系

通过p来协调m和v之间的事件

 

使用:

action:完成页面的初始化,并实例化presenter,在实例化presenter时,需要传入iview与imodel的具体实现完成view和model的关联

view:页面显示与操作事件的监听,出现操作事件时调用presenter的方法

presenter:通过model层获取数据,然后调用view的方法对页面进行刷新

在presenter构造函数中完成对view对presenter的引用,这样就view就有了presenter的引用,presenter有了view的引用,

对应view和presenter需要写接口是因为如果某一天我的view更改了或者presenter更换了新的view或者presenter只需要继承我的iview或者ipresenter就行了,然后再activity中把具体实现一改就行了。

goole-exmple中的核心代码分析:

 

详情页面:

activity:实例化了presenter完成了presenter中对view的引用

new TaskDetailPresenter(
taskId,
Injection.provideTasksRepository(getApplicationContext()),
taskDetailFragment);

presenter中:通过调用view的setPresenter(this)完成对view对presenter的引用

public TaskDetailPresenter(@Nullable String taskId,
@NonNull TasksRepository tasksRepository,
@NonNull TaskDetailContract.View taskDetailView) {
mTaskId = taskId;
mTasksRepository = checkNotNull(tasksRepository, "tasksRepository cannot be null!");
mTaskDetailView = checkNotNull(taskDetailView, "taskDetailView cannot be null!");

mTaskDetailView.setPresenter(this);
}

总结:

View和Model之间没有联系,View通过接口向Presenter来传递用户操作,Model不主动和Presenter联系,被动的等着Presenter来调用其接口,Presenter通过接口和View/Model来联系。

3、mvvm

通过vm来协调m和v之间的事件,弱化了model,主要业务可以在mv中实现,mvvm时实现了数据双向绑定,所以m和v的关系比较大,

mvvm适用于ui内容变化快,而model实体比较稳定的情况!但增加了m实体与v的耦合

 

缺点分析:

mvc:controller与view层界限模糊造成controller里代码过多如点击事件都是在controller中使用

mvp:由于p需要管理m和v,所以需要定义很多的接口,造成了代码阅读起来麻烦!

mvvm:由于view与model实体进行了绑定所以页面的复用性不高!同时由于数据进行了双向绑定,不好排错!

    ViewModel会越加庞大,调用的复杂度增加

Presenter
posted @ 2019-05-21 11:02  xiaoye2019  阅读(15)  评论(0)    收藏  举报