首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android MVP & DI

android MVP & DI
EN

Stack Overflow用户
提问于 2016-10-09 14:24:10
回答 2查看 412关注 0票数 1

我正在创建一个安卓应用程序,我编写了下面的类、接口和代码.Because,我尝试使用MVP模式,但现在我不确定我的代码是否是标准的?我是否应该使用Dagger2作为Di?模型、演示者类如下:

代码语言:javascript
复制
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();
 } }

我的推荐人是:

代码语言:javascript
复制
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");
        }
 });
}

}

  1. 我是否正确地实现了MVP
  2. 我应该使用Dagger2作为DI吗?为什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-11 08:02:10

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

最佳实践是DaggerMVPRxJavaRetrofitMock测试的混合物,这些测试提高了项目的质量和可读性。MVP帮助您使用干净和独立的分层代码,RxJava将帮助将不同的层连接到一起,Dagger2确实可以帮助您管理依赖关系,并使您在测试中的模拟变得容易。

您可以查看这个使用Dagger、MVP开发的Github上的示例项目回购,还有一些可用的测试:

报盘

票数 1
EN

Stack Overflow用户

发布于 2016-10-16 23:23:53

在我看来,它需要改进。您的模型类必须是一个具体的对象类,但是您的ChangePasswordModel包含不知道为什么要调用callbacksaveChange()方法。此逻辑必须在演示器类中实现。

遵循MVP设计模式的基本过程如下:

  1. 根据屏幕创建一个包。假设你有一个注册屏幕。然后创建一个包,<your.main.package>.signupscreen
  2. 创建SignupActivity、SignupView(这是接口)和SignupPresenter的三个类。

SignupView接口:

代码语言:javascript
复制
interface SignUpView {
    String getFirstName();
    String getLastName();
    String getEmailAddress();
    String getPassword();
}

SignupActivity实现了SignUpView,并保存了SignupPresenter的引用。

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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,Retrofit和Dagger 2,一款简单的带有MVP、Dagger、RxJava和Retrofit的Android应用程序的很棒的医生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39944656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档