上一篇中主要介绍了MVP框架的基本实现过程,Android MVP架构(2)使用注解实现一个MVP框架
那么实际过程中如何使用MVP框架呢。其实非常简单。
MVP架构的主要目的就是进行解耦,同时使各部分的代码逻辑层次分明,分工明确。鉴于这种思想,需要对功能类似的模块进行规划处理,以最基本的登录注册功能为例,需要创建的目录如图:
可以看到,对比传统的MVC架构,代码文件彷佛增加了不少,但是层次却更加分明了,通过严格的将模块分为MVP三层结构,使得拓展以及维护的可行性增加,阅读性也更加良好。
以拓展一个登录功能为例,需要执行的步骤为:
-
ILoginView 接口定义可能出现的登录结果(失败或成功)。
public interface ILoginView extends IBaseView {
void onLoginSuccessful(String msg);
void onLoginFail(int code, String error);
}
- IUserPresenter 接口模拟用户执行登录的过程(提供账号密码)。
public interface IUserPresenter {
void login(String username, String password);
}
- Model进行网络请求的实现。
public class UserModel extends BaseModel implements IUserModel {
@Override
public void login(String username, String password, IResponseListener listener) {
Map<String, String> params = new HashMap<>();
params.put("username",username);
params.put("password",password);
doPost("login",params, listener);
}
}
- Presenter中调用Model层的实现,并将数据回调给View层。
public class UserPresenter extends BasePresenter<ILoginView>
implements IUserPresenter {
@Inject private
UserModel userModel;
@Override
public void login(String username, String password) {
userModel.login(username, password, new IResponseListener() {
@Override
public void onSuccessful(Result data) {
view.onLoginSuccessful(data.getMsg());
}
@Override
public void onFailure(int errorCode, String errorMsg) {
view.onLoginFail(errorCode, errorMsg);
}
@Override
public void finished() {
}
});
}
}
- Activity中调用Presenter,处理所实现View的回调。
public class LoginActivity
extends MvpActivity implements ILoginView {
EditText nameView;
EditText psdView;
@Inject
UserPresenter userPresenter;
ProgressDialog dialog;
@Override
protected void initView() {
super.initView();
nameView = findViewById(R.id.nameView);
psdView = findViewById(R.id.psdView);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void initData() {
super.initData();
dialog = new ProgressDialog(this);
}
public void login(View view) {
String username = nameView.getText().toString().trim();
String password = psdView.getText().toString().trim();
userPresenter.login(username, password);
dialog.setTitle("正在登录。。。");
dialog.show();
}
@Override
public void onLoginSuccessful(String msg) {
dialog.dismiss();
Log.i(TAG, "onLoginSuccessful: " + msg);
//User user = JSON.parseObject(msg, User.class);
// TODO 处理返回的信息
}
@Override
public void onLoginFail(int code, String error) {
dialog.dismiss();
toast(code + " : " + error);
}
}
可以看到,在使用MVP架构之后,Activity的代码得到了极大的简化,开发人员可以专心的处理各个部分的逻辑功能。对于拓展,对源代码的改动降到了最小,符合开闭原则。
最后贴一下源码,有需要的小伙伴可以自行下载。资源下载