2025年android MVP——mvp架构的应用和优化

android MVP——mvp架构的应用和优化MVP 架构在 android 还是很好用的 我也在试着将 mvp 用在项目中 下面我就来说说 mvp 模式的应用和优化 mvp 模式的概念 MVP 是从经典的模式 MVC 演变而来 它们的基本思想有相通的地方 Controller Presenter 负责逻辑的处理 Model 提供数据 View 负责显示 比较 mvc 1 在 MVC 里 View 是可以直接访问 Model 的

大家好,我是讯享网,很高兴认识大家。

MVP架构在android还是很好用的。我也在试着将mvp用在项目中。

下面我就来说说mvp模式的应用和优化。

mvp模式的概念

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

比较

mvc:

1,在MVC里,View是可以直接访问Model的,View里会包含Model信息,不可避免的还要包括一些业务逻辑。
2,Model不依赖于View,但是View是依赖于Model。
3,有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。

mvp:

1,在MVP里,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。
2,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互。从而使得在变更View时候可以保持Presenter的不变,即重用
3,应用程序的逻辑主要在Presenter来实现,其中的View是很薄的一层。这样一来就编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试


讯享网

mvp的系统设计

我们先来个mvp系统的设计。(我们在这里模仿一个登陆的请求)
概要设计图
这里写图片描述

1,mobel层

mobel接口:规定操作数据的接口。

接口:IUserLoginMobel

/ * 用户操作接口 Model 业务层接口 */ public interface IUserLoginMobel{ 
    / * 用户登录 * * @param name * @param pwd * @param loginListener */ void login(String name, String pwd, OnLoginListener loginListener); }

讯享网

登录状态回调接口:

讯享网/ * 登陆状态接口 */ public interface OnLoginListener { 
    void loginSuccess(UserInfoBean user); void loginFailed(String message); }

类:用户登陆操作类 UserLoginModel

/ * 用户登陆操作类,Model 业务层(接收数据,处理出局) */ public class UserLoginModel implements IUserLoginMobel { 
    @Override public void login(final String name, final String pwd, final OnLoginListener loginListener) { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); if ("admin".equals(name) && "admin".equals(pwd)) { UserInfoBean userInfoBean = new UserInfoBean(); userInfoBean.setUserId(System.currentTimeMillis()); userInfoBean.setUserName(name); userInfoBean.setUserPwd(pwd); loginListener.loginSuccess(userInfoBean); } else { loginListener.loginFailed("密码错误"); } } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }

2,Presenter层

定义 UserLoginPresenter类

讯享网/ * 用户登录的任命者。Presenter (用于接收模型发出的结果,给view层发送命令) */ public class UserLoginPresenter { 
    protected IUserLoginView mvcView;//view的接口 private IUserLoginMobel userLoginMobel;//mobel的接口 private Handler mHandler = new Handler(); public UserLoginPresenter(IUserLoginView userLoginView) { this.mvcView = userLoginView; this.userLoginMobel = new UserLoginModel();//实例化用户登录业务层 } public void login() { mvcView.showLoading(); userLoginMobel.login(mvcView.getUserName(), mvcView.getPassword(), new OnLoginListener() { @Override public void loginSuccess(final UserInfoBean user) { //需要在UI线程执行 mHandler.post(
小讯
上一篇 2025-03-14 21:53
下一篇 2025-01-04 19:26

相关推荐

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