Ведущий, инструктирующий текущую активность для раздувания следующей активности; Нарушение правил MVP или нет - PullRequest
0 голосов
/ 06 июля 2018

Учитывая тот факт, что в Android вам нужен контекст пакета, чтобы можно было раздувать следующее действие из текущего действия с помощью намерения. Однако в случае MVP презентатор должен представлять собой чистый класс Java, не привязанный к таким зависимостям, как сама платформа Android.

Правильно ли реализовать два метода в представлении; Тот, который просит докладчика показать новое представление showNew (активность IView) , а затем докладчик авторизует этот запрос, передавая новое представление обратно в текущее представление и прося использовать его (действие) контекст для раздувания запрашиваемый следующий просмотр.

Другими словами, докладчик по-прежнему тот, кто заказывает создание следующего представления, только если он делает это в контексте текущего представления.

См. Пример кода ниже:

Просмотр интерфейса

public interface IBaseView{
    void showAnother(Class nextActivity);
}

Интерфейс ведущего

 public interface IBasePresenter {
      void showNew(IBaseView nextActivity);
}

Конкретный предъявитель

public class Presenter implements IBasePresenter {

IBaseView view;

public Presenter(IBaseView view){
    this.view = view;
}

@Override
public void showNew(IBaseView nextActivity) {
    view.showAnother(nextActivity.getClass());
}

Активность Android

public class SampleActivity extends AppCompatActivity implements IBaseView{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sample);
}

public void onClick(View view){
    Presenter presenter = new Presenter(this);
    presenter.showNew(new SampleNextActivity());
}

@Override
public void showAnother(Class nextActivity) {
    Intent intent = new Intent(this, nextActivity);
    startActivity(intent);
}

}

Android Следующая активность

public class SampleNextActivity extends AppCompatActivity implements IBaseView {
    //activity details here
}

В итоге

Представление создает следующий вид, но только по указанию ведущего . Поскольку докладчику нужен контекст текущего представления, чтобы иметь возможность раздувать следующий вид.

Вопрос

  1. Является ли этот подход каким-либо образом нарушающим методологию MVP

  2. Если (1) является нарушением или недостаточно чистым, есть ли лучший способ заставить докладчика создавать представления (без знания контекста класса Android)?

1 Ответ

0 голосов
/ 06 июля 2018

В паттерне MVP persenter указывает, что делать. То, как вы передаете следующий класс активности докладчику, а затем докладчик отправляет этот класс деятельности обратно для просмотра, является ненужным ИМО. Почему докладчик не дает представлению перейти к какому виду деятельности, не зная сам класс действия? Я имею в виду что-то вроде этого:

Активность Android

public class SampleActivity extends AppCompatActivity implements ISampleView {

    // ...

    public void onClick(View view){
        ISamplePresenter presenter = new SamplePresenter(this);
        presenter.buttonClicked();
    }

    @override
    public void navigateToNextView() {
        Intent intent = new Intent(this, nextActivity);
        startActivity(intent);
    }

}

Конкретный предъявитель

public class SamplePresenter implements ISamplePresenter {

    ISampleView view;

    public Presenter(ISampleView view){
        this.view = view;
    }

    @Override
    public void buttonClicked() {
        // check if user can go to next activity
        view.navigateToNextView();
    }
}

Вы можете иметь метод в своем представлении, его задача - переходить к определенному представлению, т.е. NextActivity. Если у вас есть больше видов деятельности, вы можете определить метод для каждого из них. Когда пользователь нажимает на кнопку, вы сообщаете докладчику, что пользователь нажал на кнопку. Затем вы можете выполнить некоторую логическую операцию после нажатия кнопки в SamplePresenter#buttonClicked(), а затем указать представлению перейти к NextAcitivity. На мой взгляд, этот подход более понятен, поскольку вам не нужно передавать сам урок активности докладчику.

...