Dependency injection 安卓MVP&;DI

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

我正在创建一个android应用程序,我编写了以下类、接口和代码。因为我尝试使用MVP模式,但现在我不确定我的代码是否标准? 我应该为Di使用匕首2还是不应该? 模型、演示者类别如下:

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
  • 我应该为DI使用匕首2吗?为什么?

  • 提前感谢

    您在问题中提到的示例代码是MVP的正确实现,可以通过一些更改加以改进

    最佳实践是混合使用匕首MVPRxJava改装模拟测试,以提高项目的质量和可读性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开发的示例项目,还有一些可用的测试: