dimanche 4 septembre 2016

MVP and EventBus - Who is appropriate for listening events - view or presenter?

I am using Model-View-Presenter design pattern with event bus. I have a presenter that posts an event named OnCurrentPlaceDetailsUpdated whenever some information is updated in event bus like this:

public class HomeScreenPresenter extends BaseHomePresenter {
 ...
 ...

    locationUpdatesManager.getCurrentPlace(place -> {
             EventBus.getDefault().post(new OnCurrentPlaceDetailsUpdated(place));
       }
    );
}

now, I want that place details in some other fragment. So all I have done is inside that fragment like this:

public class PlaceListFragment implements PlaceListView {

    protected EventBus eventBus;

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        initComponents();
    }

    @Override
    public void onStart() {
        super.onStart();
        eventBus.register(this);
    }

    @Override
    public void onStop() {
        eventBus.unregister(this);
        super.onStop();
    }

    @CallSuper
    @Override
    protected void initComponents() {
        eventBus = EventBus.getDefault();
    }


    @DebugLog
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onCurrentPlaceUpdatedEvent(OnCurrentPlaceDetailsUpdated onCurrentPlaceUpdated) {
          //got the event
 }
}

Is it good or bad in terms of decoupling and design? Should I subscribe the events in presenter for PlaceListFragment and then callback to fragment using PlaceListView?

Aucun commentaire:

Enregistrer un commentaire