小试牛刀MVP模式的运用

MVP模式也就是:model-处理业务逻辑,其实就是数据的读写,view-处理ui控件,也就是显示,presenter-主导器 用于操作model和view。

通过网上简单的例子后,我也决定把mvp引用到项目中来,通过实践发现 ,mvp模式,其实是降低了activity或fragment的代码压力,不至于在activity或fragment中即实现了ui,又给ui赋值,使代码解耦度高。

我也在项目里的登入界面中简单的运用一下MVP:

首先我先讲一下以前是如何做的:

protected void onCreate(Bundle savedInstanceState){
EditText	mEtAccount = (EditText) findViewById(R.id.et_account);
EditText	mEtPSW = (EditText) findViewById(R.id.et_psw);
//通过SharedPreferences获取账号或密码
		mEtAccount.setText(PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PHONE));
		mEtPSW.setText(PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PWD));
}
/**
*调用登入接口
*/
private void login() {
//这里我就不写了,主要是通过账号和密码调用后台登入账号,进行登入。
//在登入成功的地方 通过SharedPreferences保存账号和密码
PreferencesHelper.saveLoginInfo(account, psw);
}

下面是我通过网上的mvp例子来写这个地方

1.创建一个bean也就是usename和password

public class UserBean {
	private String userName;
	private String password;
	public UserBean() {
		super();
		
	}
	public UserBean(String userName, String password) {
		super();
		this.userName = userName;
		this.password = password;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
2.创建接口IUserModel:这个就是mvp中model,用于存放和获取账号和密码

public interface IUserModel {
	void setUserName(String userName);
	void setPassword(String password);
	UserBean load();
}
3.创建类UserModel:用来实现IUserModel,在这个类里面 实现load()方法是用于保存数据

public class UserModel implements IUserModel{

	@Override
	public void setUserName(String userName) {}

	@Override
	public void setPassword(String password) {}

	@Override
	public UserBean load() {
//这个地方我是通过获取账号和密码,如果有需要也可以通过网络或数据库获取数据放入bean中
		String userName=PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PHONE);
		String password=PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PWD);
		return new UserBean(userName, password);
	}
	
}
4.创建接口IUserView :这个就是mvp中的view,用于对账号和密码这两个edittext进行读操作和写操作

public interface IUserView {
	void setUserName(String userName);
	void setPassword(String password);
	String getUserName();
	String getPassword();
}
5.创建类UserPresenter:这个就是mvp中的presenter,用于操作model和view

public class UserPresenter {
	private IUserModel iUserModel;
	private IUserView  iUserView;
	public UserPresenter(IUserView iUserView) {
		super();
		this.iUserModel = new UserModel();
		this.iUserView = iUserView;
	}
	
	public void saveUser(String userName,String password){
//这个地方是用SharedPreferences保存账号和密码
		PreferencesHelper.saveLoginInfo(userName, password);
		iUserModel.setUserName(userName);
		iUserModel.setPassword(password);
	}
	public void loadUser(){
//这个地方是获取保存的账号和密码
		UserBean bean=iUserModel.load();
		iUserView.setUserName(bean.getUserName());
		iUserView.setPassword(bean.getPassword());
	}
}
6,然后在activity中运用mvp:

public class LoginActivity extends BaseAct implements IUserView{//这地方要实现IUserView接口
protected void onCreate(Bundle savedInstanceState) {
	EditText mEtAccount = (EditText) findViewById(R.id.et_account);
	EditText mEtPSW = (EditText) findViewById(R.id.et_psw);
presenter=new UserPresenter(this);
		presenter.loadUser();
}
private void login(){
presenter.saveUser(account, psw);//登入成功后保存账号和密码
}
@Override
	public void setUserName(String userName) {
		mEtAccount.setText(userName);
	}

	@Override
	public void setPassword(String password) {
		mEtPSW.setText(password);
	}

	@Override
	public String getUserName() {
		return mEtAccount.getText().toString();
	}

	@Override
	public String getPassword() {
		return mEtPSW.getText().toString();
	}


}
activity中的代码只是片段,主要是几点是实现IUserView接口,初始化UserPresenter,然后在显示值得地方调用loadUser(),在保存的地方调saveUser()方法,最后在实现的方法中将值放入两个editText中就行了。

mvp这只是初次尝试比普通的的开发和mvc还是先进很多,唯一的缺点就是代码量增加了,就为了那几行代码,就创建了5个java文件,不过 在它的优点面前,这点缺点还是可以容忍的,这次只是简单的运用, 下一步我要尝试从服务端获取集合的数据如何用mvp模式做。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值