3

我正在编写基于多层 MVP 的应用程序。所有层的通用方法都转到 BASE 层。然后每个子类的特定方法转到 MIDDLE 和 TOP 层。

从代码示例中,您可以看到我将演示者的视图作为 create 方法的参数传递。

我的问题是我应该如何将我的演示者传递给父母的意见。我可以按照示例中所示的方式进行操作,其中 BASE 层演示者在创建视图时将其自身附加到视图?或者应该一个 TOP 层片段(创建演示者的地方)将演示者附加到父片段。

或者也许有另一种方法来处理这种情况。

基层

public interface BaseView extends BaseProgressDialogInterface{
    void setPresenter(BasePresenter presenter);
}

public class BaseFragment extends Fragment implements BaseView{
    private BasePresenter presenter;

    @Override
    public void setPresenter(BasePresenter presenter) {
        this.presenter = presenter;
    }

    public void randomEvent(){
        if (presenter != null)
            presenter.doSomething();
    }
}

public class BasePresenter {
    private final BaseView view;

    public BasePresenter(BaseView view) {
        this.view = view;
        view.setPresenter(this);
    }

    public void doSomething(){
        //Do something..
    }
}

中间层

public interface BaseMainScreenView extends BaseView{
    void startSomeActivity();
}

public class BaseMainScreenFragment extends BaseFragment implements BaseMainScreenView {
    //Can be called from multiple top classes
    public void startSomeActivity (){
        //Starting other activity, do not need a presenter in this class
    }
}

public class BaseMainScreenPresenter extends BasePresenter {
    private final BaseMainScreenView view;

    public BaseMainScreenPresenter(BaseMainScreenView view) {
        super(view);
        this.view = view;
    }

    //Other logic...

}

顶层

public interface TopFragmentView extends BaseMainScreenView {
    //...
}

public class TopFragment extends BaseMainScreenFragment implements TopFragmentView {
    private TopFragmentPresenter presenter;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        presenter = new TopFragmentPresenter(this);
    }

    public void topEvent(){
        presenter.topAction();
    }
}

public class TopFragmentPresenter extends BaseMainScreenPresenter {
    private final TopFragment view;

    public TopFragmentPresenter(TopFragment view) {
        super(view);
        this.view = view;
    }

    public void topAction(){
        view.startSomeActivity();
    }
}
4

0 回答 0