mvp框架有哪些_至尊plus框架下载

mvp框架有哪些_至尊plus框架下载省代码。不能偷懒的框架都是耍流氓,当然像 Rx 系列这样可以简化逻辑的也是正经人。 不依赖其他库。不跟 Retrofit,Rxjava 等等耦合,只是纯粹的辅助 MVP 的实现

前言

听到一些童鞋抱怨MVP,所有搞了个辅助实现MVP的小东西,叫MvpFrame。还不了解MVP的先看《Google原味mvp实践》。主要的功能如下

  • 省代码。不能偷懒的框架都是耍流氓,当然像Rx系列这样可以简化逻辑的也是正经人。
  • 不依赖其他库。不跟Retrofit,Rxjava等等耦合,只是纯粹的辅助MVP的实现。
  • 小,只有8k。可以在任意最小业务单元使用,即使之前业务没使用,或者之后不想使用都没关系。
  • M,V,P中各个层级的实例托管。
  • 维护M,V,P中对其他层的引用,并保证实例可回收。
  • 在工程任意位置获取MVP中的实例。

开源地址是

github.com/wolearn/Mvp…

怎么用

可以把上面工程中的mvpframelib作为Android Lib引入,或者直接复制java文件也可以。我简单解释下还是我常用那个登陆的例子。先看目录结构。

mvp框架有哪些_至尊plus框架下载

初始化

在Application中调用

Mvp.getInstance().init(this);

规划好view和presenter的接口。

public class LoginContract {
    public interface View extends BaseView {
        String getAccount();
        String getPassword();
        void loginSuccess();
        void loginError(String errorMsg);
    }

    public interface Presenter extends BasePresenter {
        void login();
    }
}

用一个契约类来定义需要的方法。之前有童鞋问我,这个接口写好烦,能不能不写。肯定不能。我能想到的理由有三点

  • 依赖倒置原则。高层模块和底层模块之间不能直接依赖,而是应该依赖其接口
  • 保证其可测性
  • 面向接口编程的前期设计感

View层

可以支持Activity和Fragment,Activity继承MvpActivity,Fragment继承MvpFragment。

public class LoginActivity extends MvpActivity implements LoginContract.View, View.OnClickListener {
    private EditText edtAccount, edtPassword;
    private Button btnLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        initViews();
    }

    @Override
    public BaseView getBaseView() {
        return this;
    }

    @Override
    public void onClick(View v) {
        mPresenter.login();
    }

    private void initViews() {
        edtAccount = (EditText) findViewById(R.id.edt_account);
        edtPassword = (EditText) findViewById(R.id.edt_password);
        btnLogin = (Button) findViewById(R.id.btn_login);

        btnLogin.setOnClickListener(this);
    }

    @Override
    public void loginError(String msg) {
        Toast.makeText(LoginActivity.this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void loginSuccess() {
        Toast.makeText(LoginActivity.this, getResources().getString(R.string.login_success), Toast.LENGTH_SHORT).show();
    }

    @Override
    public String getAccount() {
        return edtAccount.getText().toString();
    }

    @Override
    public String getPassword() {
        return edtPassword.getText().toString();
    }
}
  • 注意MvpActivity,在继承的时候要通过泛型确定Presenter层的具体类型,一定要写。
  • getBaseView方法返回的是IView类型,如果是当前Activity实现的话,直接返回this即可。
  • mPresenter可以直接使用,不用声明和实例化

Presenter层

Presenter继承MvpPresenter实现即可。

public class LoginPresenter extends MvpPresenter implements LoginContract.Presenter {
    private static final String TAG = "LoginPresenter";

    @Override
    public void login() {
        if (!checkParameter()) return;

        String account = getIView().getAccount();
        String password = getIView().getPassword();

        mModel.login(account, password);

        //模拟登陆成功
        getIView().loginSuccess();
    }

    /** * 登录参数校验 * * @return */
    private boolean checkParameter() {
        try {
            if (TextUtils.isEmpty(getIView().getAccount())) {
                getIView().loginError(mContext.getString(R.string.toast_account_empty));
                return false;
            }

            if (TextUtils.isEmpty(getIView().getPassword())) {
                getIView().loginError(mContext.getString(R.string.toast_password_empty));
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }
}
  • 注意MvpPresenter的泛型,要确定Model的具体实现和IView。
  • IView的回调接口对象通过getIView()方法获取
  • mModel指向泛型中确认的LoginHttp对象,可以直接使用,不用声明和实例化
  • mContext是一个ApplicationContext的引用

Model层

数据的来源一般有三个:DB,NET,Cache。看个图

mvp框架有哪些_至尊plus框架下载

之前有童鞋说,业务过程很烦,要搞个UseCase文件,然后又要搞个Repository文件,最后搞个HttpLogin,因为登录本来就只是要跟服务端确认,前面2个文件基本都是透传。是不是一定要这么死板呢?当然不是,结构可以根据业务的复杂度做调整的。比如我这里登录就是直接让HttpLogin继承MvpModel, 直接跟P层交互。

public class LoginHttp extends MvpModel {
    private static final String TAG = "LoginHttp";

    /** * 密码登陆 * * @param account * @param password */
    public void login(String account, String password) {
// execute(api.login(account, password), callback);
    }
}

如果你当前业务是只跟DB打交道,也可以让LoginDB继承MvpModel,然后在P层的泛型中确认类型即可。

其他任意位置获取M,V,P实例

默认通过以下API获取的唯一实例,传入为实例的class类型

Mvp.getInstance().getPresenter();
Mvp.getInstance().getModel();
Mvp.getInstance().getView();

getPresenter 和 getModel 的实例默认会创建,getView 要确定Activity或者Fragment已经创建,否则可能为null。

后记

建议以文件的形式引入,方便依据工程业务做定制化。喜欢请帮忙戳喜欢,有问题欢迎评论。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13201.html

(0)

相关推荐

  • Python自学指南:快速成为Python编程高手

    Python自学指南:快速成为Python编程高手Python是一种面向对象的编程语言,它被广泛应用于数据科学、人工智能和Web开发。想要成为Python编程高手并不困难,只需要掌握一些基本概念和技能,并且不断练习和探索。本文将从多个方面对Python进行详细阐述,帮助读者快速成为Python编程高手。

    2024-02-23
    65
  • 002-postgres initdb 初始化[通俗易懂]

    002-postgres initdb 初始化[通俗易懂]一、初始化命令解析 initdb — 创建一个新的PostgreSQL数据库集簇 语法说明: initdb [option…] [ –pgdata | -D ] directory 参数解析:…

    2023-03-01
    107
  • ocp认证题库_ccf认证考试报名

    ocp认证题库_ccf认证考试报名Choose two Examine the data in the CUST NAME column of the CUSTOMERS table: CUST_NAME ————-…

    2022-12-19
    101
  • 异构存储数据迁移_数据异构

    异构存储数据迁移_数据异构在开源技术使用日益广泛的今天,笔者也可能突然被要求用一个新工具同步数据到一个新数据库,时间还可能更紧迫。到时怎么办呢?再愤怒一次吗?不了不了,还是脚踏实地总结一下,记下这些坑,日后类似项目,哪怕被拿着

    2023-05-09
    93
  • 使用Python保存.py文件的方法

    使用Python保存.py文件的方法Python代码通过保存在.py文件中来进行管理和运行,而Python的解释器可以读取这些文件并进行解释执行。因此,我们需要将编写的Python代码保存到.py文件中以供后续使用。Python文件的保存过程可以分为两个步骤:首先将代码编辑器中的Python代码保存为.py文件,然后在需要运行代码的时候使用Python解释器来执行该文件。

    2024-02-10
    44
  • 搭建亿级时间线数据的监控系统,我有绝招!

    搭建亿级时间线数据的监控系统,我有绝招!摘要:本文为你带来如何使用华为云数据库GaussDB(for Influx) + Grafana搭建亿级时间线数据的监控系统。 本文分享自华为云社区《HDC.Cloud2021|如何使用华为云Gau…

    2023-04-14
    97
  • 理解Python中的ndarray

    理解Python中的ndarray随着数据分析和机器学习的普及,Python的numpy模块中的ndarray逐渐成为Python中最常用的数据结构之一。Python的ndarray是一种多维数组对象,可以在Python中实现大规模数据和矩阵计算。

    2024-05-04
    10
  • 如何用count计算人数_利用countif函数统计人数

    如何用count计算人数_利用countif函数统计人数在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用MySQL 的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询

    2023-06-06
    97

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注