在 MVP 模式中为回调函数创建一个单独的接口是否可以

Is it fine to create a separate interface for call back function in MVP pattern

我正在尝试使用 MVP design pattern 创建一个应用程序。这是我第一次使用这种模式,这就是我不太关心我是否正确遵循这种模式的原因。

这是我到目前为止所做的。我没有使用 Dagger2.

界面

public interface MainActivityMVP {

    interface Model{
        void sendTokenToServer(MainActivityMVP.Presenter presenter);
    }

    interface View{
        boolean isPnTokenRegistered();
        void tokenUpdated();
        void tokenFailedToUpdate();
    }

    interface Presenter{
        void tokenUpdatedSuccessfully();
        void tokenAlreadyExists();
        void detachView();
    }

MainActivity 上,我创建了 PresenterModel 的实例并将 Model 对象传递给 Presenter Constructor

MainActivity

    public class MainActivity extends BaseActivity implements MainActivityMVP.View {

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

            mainPresenter= new MainPresenter(this, new MainModel());
            mainPresenter.sendFCMTokenToServer();
        }

在 Presenter 上我调用 Model's 方法来执行操作,并将 presenter 引用传递给它。

主持人

    public class MainPresenter implements MainActivityMVP.Presenter{

        MainActivityMVP.View view;
        MainActivityMVP.Model model;


        public MainPresenter(MainActivityMVP.View view, MainActivityMVP.Model model){
            this.view= view;
            this.model= model;
        }


        public void sendFCMTokenToServer() {
            model.sendTokenToServer(this);
        }

       @Override
       public void tokenUpdatedSuccessfully() {
         view.tokenUpdated();
       }

        @Override
        public void tokenAlreadyExists() {
          view.tokenFailedToUpdate();
        }

在模型中,我创建了 PreferenceManager class 的实例,它从 SharedPreference

获取数据
public class MainModel implements MainActivityMVP.Model {

    PreferencesHelper preferencesHelper;


    public MainModel(){
        preferencesHelper= new PreferencesHelper();
    }

 @Override
    public void sendTokenToServer(MainActivityMVP.Presenter presenter) {

        if (preferencesHelper.getNotificationSettings().isEmpty()) {
           //do stuff

           presenter.tokenUpdatedSuccessfully();
        }
  }

现在我有这些问题。

开发人员实施 MVP 的方式各不相同。很少有人使用交互器。在 MVP 中使用交互器不是强制性的。由于您处于起步阶段,我将在下面向您推荐。

 public interface MainView extends BaseView {
         boolean isPnTokenRegistered();
         void tokenUpdated();
         void tokenFailedToUpdate(); 
}

然后让你的basepresenter变成这样

public interface BasePresenter<V extends BaseView> {

    void setView(V view);

    void destroyView();

    void destroy();
}

现在是您的 MainPresenter

    public class MainPresenter implements BasePresenter<MainView>{

    MainView view;
    PreferencesHelper preferencesHelper;

   MainPresenter(){
        preferencesHelper= new PreferencesHelper();
   }

      @Override
      public void setView(MainView view) {
        this.view = view;
      }

      @Override
      public void destroyView() {
        this.view = null;
      }

      @Override
      public void destroy() {

      }

       public void sendFCMTokenToServer() {
            //Do whatever you want
        }

    }

终于让你的activity变成这样了,

public class MainActivity extends BaseActivity implements MainView {

        MainPresenter mainPresenter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_base);
            mainPresenter= new MainPresenter();
            mainPresenter.attachView(this)
            mainPresenter.sendFCMTokenToServer();

        }