Dependency injection 安卓MVP&;DI
我正在创建一个android应用程序,我编写了以下类、接口和代码。因为我尝试使用MVP模式,但现在我不确定我的代码是否标准? 我应该为Di使用匕首2还是不应该? 模型、演示者类别如下:Dependency injection 安卓MVP&;DI,dependency-injection,mvp,dagger-2,Dependency Injection,Mvp,Dagger 2,我正在创建一个android应用程序,我编写了以下类、接口和代码。因为我尝试使用MVP模式,但现在我不确定我的代码是否标准? 我应该为Di使用匕首2还是不应该? 模型、演示者类别如下: public class ChangePasswordModel{ public void saveChange(final String oldPass, final String newPass, final ChangePasswordCallback callback) { /*in r
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");
}
});
}
}
提前感谢您在问题中提到的示例代码是MVP的正确实现,可以通过一些更改加以改进 最佳实践是混合使用匕首、MVP、RxJava、改装和模拟测试,以提高项目的质量和可读性MVP帮助您创建一个干净、独立的分层代码,RxJava将帮助将不同的层连接在一起,Dagger2确实可以帮助您管理依赖项,还可以简化测试中的模拟
您可以查看my Github上的这个示例项目repo,它是使用Dagger、MVP开发的,还有一些可用的测试:
我认为这需要改进。模型类必须是一个具体的对象类,但是
ChangePasswordModel
包含saveChange()
方法,该方法不知道调用回调的原因。此逻辑必须在Presenter类中实现
遵循MVP设计模式的基本过程如下:
根据您的屏幕创建一个包。假设您有一个注册屏幕。然后创建一个包,.signupscreen
创建三类SignupActivity,SignupView(这是接口),SignupPresenter
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:
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的活动的基本实现。我建议大家看看这个关于MVP、改装和匕首2的很棒的文档,检查一下它是一种与MVP匕首和改装相关的文档。你可以看看这个使用匕首、MVP开发的示例项目,还有一些可用的测试: