我正在创建一个Android应用程序,我编写以下类和接口和代码。因为我尝试使用MVP模式,但现在我不确定我的代码是否标准? 我应该使用Dagger2 for Di还是不应该? 模特,演示者课程如下:
public class ChangePasswordModel{
public void saveChange(final String oldPass, final String newPass, final ChangePasswordCallback callback) {
/*in real world it change password with API*/
callback.onDo();
} }
我的主持人是:
public class ChangePasswordPresenter{
private ChangePasswordContract.View mView;//this is an interface to interact with Activity
public ChangePasswordPresenter(ChangePasswordContract.View mView) {
this.mView = mView;
}
public void pSaveChange(String oldPass, String newPass) {
ChangePasswordModel model = new ChangePasswordModel();
model.saveChange(oldPass, newPass, new ChangePasswordCallback() {
@Override
public void onDo() {
mView.showMessage("password Changed");
}
});
}
}
先谢谢
答案 0 :(得分:1)
您在问题中提到的示例代码是MVP的正确实现,可以通过一些更改来改进。
最佳做法是混合使用 Dagger , MVP , RxJava ,改造和模拟测试可提高项目的质量和可读性。 MVP 可帮助您使用干净且独立的分层代码, RxJava 将有助于将不同的层连接在一起, Dagger2 可以真正帮助您管理依赖关系并且还可以让你的模拟测试变得简单。
您可以在我的Github上查看这个使用Dagger,MVP开发的示例项目回购,还有一些测试可用:
答案 1 :(得分:1)
我认为需要改进。您的Model类必须是具体的对象类,但是ChangePasswordModel
包含saveChange()
方法,不知道它为什么调用callback
。此逻辑必须在Presenter类中实现。
以下MVP设计模式的基本过程如下:
<your.main.package>.signupscreen
。 SignupView
界面:
interface SignUpView {
String getFirstName();
String getLastName();
String getEmailAddress();
String getPassword();
}
SignupActivity
实现SignUpView
并拥有SignupPresenter的引用。
public class SignUpActivity implements SignUpView {
@Inject
public Service mService;
SignUpPresenter mSignUpPresenter;
@Override
protected void onStart() {
super.onStart();
mSignUpPresenter = new SignUpPresenter(mService, this);
}
@Override
protected void onStop() {
super.onStop();
if (mSignUpPresenter != null) {
mSignUpPresenter.onStop();
}
}
@Override
public String getFirstName() {
return etFirstName.getText().toString().trim();
}
@Override
public String getLastName() {
return etLastName.getText().toString().trim();
}
@Override
public String getEmailAddress() {
return etEmail.getText().toString().trim();
}
@Override
public String getPassword() {
return etPassword.getText().toString().trim();
}
}
最后SignupPresenter
课程:
class SignUpPresenter implements SignUpCallback {
private final Service service;
private final SignUpView view;
private CompositeSubscription subscriptions;
SignUpPresenter(Service service, SignUpView view) {
this.service = service;
this.view = view;
this.subscriptions = new CompositeSubscription();
}
void onStop() {
subscriptions.unsubscribe();
}
}
这是基于MVP的Activity的非常基本的实现。我建议看一下这个令人敬畏的文档MVP,Retrofit和Dagger 2,A Simple Android Apps with MVP, Dagger, RxJava, and Retrofit