Android组件化支付模块,Android 组件化/模块化之路

Android 组件化/模块化之路——在展示层搭建MVP结构

什么是MVP

Model–View–Presenter (MVP) 源于 Model–View–Controller (MVC) 的结构设计模式,它是用于展示层(Presentation)的结构。

MVP 中的 Presenter 是 “中间人”角色,它的功能是在 Model–View–Presenter 三者中起到连接和协作的作用。程序中的大部分的逻辑都应该在 Presenter 中实现。

Model 定义了数据的访问接口。例如之前文章 《App 组件化/模块化之路——Repository 模式》 就介绍了使用 Repository 实现数据访问的一种方式。

View 定义了展示数据的接口,以及转发用户的指令

Presenter 是连接 Model 与 View 的桥梁,是它们的协作者。

接下来我们就开始搭建通用的 MVP 结构了。

Model

Model 的实现主要是根据业务,我们这里是推荐使用 Repository 来实现,可以参考文章 《App 组件化/模块化之路——Repository 模式》 。

View

首先我们定义 View 接口,这里定义了一个请求的通用流程 onStart()、 onFinished()、 onError() 等方法。

108715593_1_20170818022734708.gif

public interface IView{

Activity getActivity();/*** 请求开始*/

voidonStart();/*** 请求结束*/

voidonFinished();/*** 请求出错

*@paramerrorCode

*@parammessage*/

void onError(interrorCode, String message);

}

108715593_1_20170818022734708.gif

Presenter

先定义 IPresenter, 接口很简单,是 Presenter 创建和注销的过程。

108715593_1_20170818022734708.gif

public interfaceIPresenter {voidonCreate();voidonDestroy();

}

108715593_1_20170818022734708.gif

然后定义 BasePresenter,这个是 Presenter 是各个具体业务实现的基类。

108715593_1_20170818022734708.gif

public abstract class BasePresenter implementsIPresenter {public static final int ERROR_RX = 2000;publicT view;publicBasePresenter(T view) {this.view =view;

}

@Overridepublic voidonCreate() {

}

Activity getActivity() {returnview.getActivity();

}/*** 用于判断当前view是否已经退出

*

*@return

*/

public booleanisViewDetached() {if (view == null) {return true;

}if (view.getActivity() == null) {return true;

}if(view.getActivity().isFinishing()) {return true;

}return false;

}publicString getRxErrorText() {returnview.getActivity().getString(R.string.error_network);

}

@Overridepublic voidonDestroy() {

view= null;

}

}

108715593_1_20170818022734708.gif

Contract

使用 Contract 模式的好处就是,如果我们的业务需求很多,那么在展示层(Presentation)中就会出现了大量的 MVP 文件。这样对于后续维护工作是一件非常令人头痛的事情,所以使用 Contract 来规范 View 和 Presenter 文件。这样具体业务只要找到 Contract 文件,就可以知道这个业务的具体接口有哪些了。

其中 Contract 下面的 View 是定义具体业务的接口了。该类可以在 UI(例如Activity或Fragment)中实现它。

108715593_1_20170818022734708.gif

public interfaceDemoContract {interface View extendsIView {voidonGetDataFinished(String data);//other callbacks

}interface Presenter extendsIPresenter {voidgetData();//other mehtods

}

}

108715593_1_20170818022734708.gif

那么在具体实现 Presenter 时,这里的 Repository 就是 Model了。使用它可以对数据进行访问和存储。

108715593_1_20170818022734708.gif

public class DemoPresenter extends BasePresenter implementsDemoContract.Presenter {

DemoRepository repository;publicDemoPresenter(DemoContract.View view) {super(view);

}

@Overridepublic voidgetData() {

view.onGetDataFinished("");

}

}

108715593_1_20170818022734708.gif

Client

客户端的使用基本上是在 Android View 组件。例如

108715593_1_20170818022734708.gif

public class DemoActivity extends AppCompatActivity implementsDemoContract.View {

DemoPresenter mPresenter;

@Overrideprotected voidonCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);

mPresenter= new DemoPresenter(this);

mPresenter.getData();//请求数据

}

@Overrideprotected voidonDestroy() {super.onDestroy();

mPresenter.onDestroy();

}

@OverridepublicActivity getActivity() {return this;

}

@Overridepublic voidonGetDataFinished(String data) {//这里获取到数据

}

@Overridepublic voidonBegin() {//请求开始,可以显示loading等操作

}

@Overridepublic voidonFinished() {//请求结束,取消loading等操作

}

@Overridepublic void onError(interrorCode, String message) {//处理出错

}

}

108715593_1_20170818022734708.gif

参考文献

https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter

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

微信关注我们,可以获取更多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值