Android学习笔记---MVP架构系列0x01

上次我们对MVP架构有了基本的了解,并且对我们的例子做了开发前的准备,这次我们就把项目的基本结构目录搭建起来.

基本项目结构

项目是功能模块来进行包管理的,项目中只有一个简单的电影加载模块所以比较简单.下图是目前基本的项目的目录结构:
基本目录结构
首先我们有两个抽象的接口,作为所有ViewPresenter的基类:

1
2
3
4
5
6
7
8
9
10
/**
* View模块抽象接口
*/

public interface BaseView<T> {
/**
* 将对应的Presenter注入到View当中
* @param presenter 注入的Presenter
*/

void setPresenter(T presenter);
}

1
2
3
4
5
6
7
8
9
10
/**
* View模块抽象接口
*/

public interface BaseView<T> {
/**
* 将对应的Presenter注入到View当中
* @param presenter 注入的Presenter
*/

void setPresenter(T presenter);
}

按功能划分的模块管理

项目中采用了按功能划分模块,加载电影模块中的MovieContract.java是一个管理特定功能下的ViewPresenter模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 用于管理loadMovie功能模块的View与Presenter
*/

public class MovieContract {

/**
* loadMovie模块的View,提供对外的UI更新接口
*/

interface View extends BaseView<Presenter>{

}
/**
* loadMovie模块的Presenter,负责获取数据并处理,更新UI
*/

interface Presenter extends BasePresenter{

}

}

具体的接口方法我们会在后面添加.我们通常让Fragment担任View的角色:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MovieFragment extends Fragment implements MovieContract.View{

//持有Presenter的实例
MoviePresenter mPresenter;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void setPresenter(MovieContract.Presenter presenter) {
mPresenter = (MoviePresenter) presenter;
}
}

我们具体的Presenter如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 具体的loadMovie模块的Presenter
*/

public class MoviePresenter implements MovieContract.Presenter{
//持有View对象,用于对UI进行更新
MovieContract.View mView;

public MoviePresenter(MovieContract.View view) {
this.mView = view;
mView.setPresenter(this);
}

@Override
public void start() {
}
}

上面的代码只是对整个MVP架构的简单搭建,后面我们会对代码进行一步一步的完善.