2016-10-09 2 views
1

Я создаю приложение для Android и пишу следующие классы и интерфейс и коды. Потому что я пытаюсь использовать шаблон MVP, но теперь я не уверен, что мои коды являются стандартными или нет? Должен ли я использовать Dagger2 для Di или не должен? модель, класс ведущий ниже:android MVP & 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"); 
     } 
}); 
} 

}

  1. ли я реализовал MVP правильно?
  2. Должен ли я использовать Dagger2 для DI? Зачем?

Спасибо advaned

+0

проверить, как его связать с кинжалом MVP и модифицировать http://stackoverflow.com/questions/39957632/dagger-2 -not-injecting-in-interface-type – sector11

+0

Вы можете посмотреть этот образец проекта, который был разработан с использованием Dagger, MVP, и есть также некоторые доступные тесты: http://github.com/mmirhoseini/fyber_mobile_offers –

ответ

0

Выборочные коды, которые вы упомянули в своем вопросе является правильной реализации MVP, который может получить улучшенную некоторыми изменениями.

Лучшая практика представляет собой смесь Dagger, MVP, RxJava, дооснащения и Мок тесты, которые улучшают качество и читаемость вашего проекта. MVP помогает вам с чистым и отдельным многоуровневым кодом и RxJava поможет с подключением разных слоев вверх и Dagger2 может действительно помочь вам в управлении зависимостями, а также упростить процесс Mocking in test.

Вы можете посмотреть на этот проект образца репо на моем Github, который был разработан с использованием Dagger, MVP и может есть также некоторые испытания доступны:

http://github.com/mmirhoseini/fyber_mobile_offers

1

Она должна быть улучшилось, на мой взгляд. Класс Model должен быть конкретным классом объекта, но ваш ChangePasswordModel содержит метод saveChange(), который понятия не имеет, почему он вызывает callback. Эта логика должна быть реализована в классе Presenter.

В основном процесс следующий MVP шаблон проектирования выглядит следующим образом:

  1. создать пакет, основанный на экране. Допустим, у вас есть экран регистрации. Затем создайте пакет, <your.main.package>.signupscreen.
  2. Создайте три класса RegistrationActivity, RegistrationView (это интерфейс), RegistrationPresenter.

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. Я рекомендую взглянуть на этот замечательный документ. MVP, Retrofit and Dagger 2, A Simple Android Apps with MVP, Dagger, RxJava, and Retrofit

Смежные вопросы