从0到1搭建MVP框架

本文介绍了如何从零开始构建Android MVP框架,分析了基础的MVP架构,然后逐步解决生命周期管理和回调接口的局限性,通过两次修改实现了更高效的框架。最后强调,MVP框架的应用需要根据项目大小和需求灵活选择,不适用于所有项目。
摘要由CSDN通过智能技术生成

简书:https://www.jianshu.com/p/172c67b37fb0

相信大多处在Android进阶阶段的朋友都了解过Android框架方面的知识,要开发一款优秀的app,自然少不了优秀的应用框架。好的框架能够让你的代码变得更加简洁易读,也更有利于后续开发和维护。

MVP框架即Model、View、Presenter,其优点是将View和Model解耦,在View层只需要执行Presenter提供的请求数据的方法,并给Presenter提供一个更新视图的方法;Presnter执行请求方法,从Model层获取需要的数据,处理完成后就通知View层更新视图(如果需要的话)。这其中View完全没有与Model交互,仅仅只是发送请求,请求之后的具体流程View层一概不知。这样做的好处一是让View层的代码更加清晰,因为只剩下UI方面的业务逻辑代码;二是当Model层发生变动时,仅需修改Presenter的请求逻辑,而View层不用作出改变。

关于MVP框架理论方面的知识网上有很多,大多都异曲同工,本质上都是讲它的分层解耦,在此就不再赘述。然而在实际应用时,可能部分MVP框架的初学者就会变得云里雾里——怎么每个人的MVP框架实现都不一样呢?

其实,MVP框架只是一种将业务逻辑代码分层解耦的概念,若只是简单的将每个功能模块的代码都分割成Model、View和Presenter三个部分,那项目将会变得十分庞大且出现大量的冗余代码,这就与使用MVP框架的初衷背道而驰了。所以,在构建MVP框架时就要在分层的基础上对代码再进行封装和抽象,让代码变得更加清晰易懂,而这些不同的封装抽象思路,就造就了多种多样的MVP框架实现。

下面,我们就亲自动手来实现一个MVP框架吧

MVP初建

从最简单的例子着手,如图所示,Activity中有一个TextView和一个Button,点击Button开始请求数据,数据返回后展示在TextView中

首先分析业务层次,View层即Activity,Model层是getData的数据源,Presenter连接View和Model,在Presenter中实现getData的请求逻辑,并将返回结果通知给View更新TextView

写出最基础的雏形,就是最基本的MVP框架

我们以分层结构建包,如果项目中的功能模块很多的话,可以以功能模块来建包

model层包括一个MyModel类和一个Callback回调接口,这里需要注意遵守面型对象设计的原则(如果不了解的同学建议去了解一下,可能让你对代码的读写产生新的理解),从Model获取数据时,不能直接在Model中获取数据的方法内返回数据,必须通过接口回调的方式将数据传给Presenter层,这样做可以降低层次间的耦合。

Model层代码

/**

* 数据请求回调接口

*/

public interface Callback {

    void onSuccess(String data);

    void onError(String errorMsg);

}

 

public class MyModel {

    public static void getData(final String token, final Callback callback) {
        //不要在主线程执行耗时操作
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                switch (token) {
                    case "local":
                        getLocalData(callback);
                        break;
                    case "net":
                        getNetData(callback);
                        break;
                }
            }
        });
    }

    private static void getLocalData(Callback callback) {
        try {
            Thread.sleep(1000);
      
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值