Wie nutze ich einen Eventbus effektiv?

Im Moment erkunde ich einige Optionen für ein Android-Lernprojekt. Ich versuche mit meiner Rails API zu kommunizieren (ebenfalls ein Lernprojekt).

Nach einigen Recherchen habe ich mich für ein System entschieden, bei dem Retrofit und Otto zum Einsatz kommen.

Was ich am Ende habe, ist das. Wenn ich meinen Rails-Server anrufen möchte (in diesem Fall um mich anzumelden), mache ich das in der Aktivität.

 mBus.post(new SignupRequestEvent(new UserRequestParams(mName,mEmail,mPassword,mPasswordConfirmation )));

und dann in der gleichen Aktivität habe ich das.

@Subscribe
public void onSignupCompleted(SignupCompletedEvent event) {
    System.out.println(String.format("in onSignupCompleted, got token = %s ", event.getParams().getToken()));

}

Das Problem hierbei ist, dass derzeit jeder API-Anforderungstyp und der entsprechende Antworttyp ein eindeutiger Ereignistyp sind und eine eigene Klasse erfordern, was wie eine Menge Code vom Typ Boiler Plate aussieht.

Zum Anmelden und Abmelden benötige ich beispielsweise die folgenden zwei Klassen:

public class SignupRequestEvent {
    protected UserRequestParams mSignupParams;

    public SignupRequestEvent(UserRequestParams signupParams) {
        mSignupParams = signupParams;
    }

    public UserRequestParams getParams() {
        return mSignupParams;
    }

}

public class SignupCompletedEvent {

    private SignupCompletedParams mSignupCompletedParams;
    public SignupCompletedParams getParams() {
        return mSignupCompletedParams;
    }
    public SignupCompletedEvent(SignupCompletedParams signupCompletedParams) {
        mSignupCompletedParams = signupCompletedParams;
    }

}

Und ich denke, die meisten Eventklassen wären ziemlich identisch.

Ich denke, ich sollte nur 2 Ereignisse für API-Aufrufe haben, eines für Anforderungen und eines für Antworten, aber dann müsste jede Methode, die ein API-Antwortereignis empfängt, prüfen, ob es sich um eine Antwort auf die gewünschte Anforderung handelt.

Diese Option würde ungefähr so bedeuten:

ApiRequestEvent apiRequestEvent = new ApiRequestEvent();
apiRequestEvent.setAction("SIGNUP");
apiRequestEvent.setParameters(new UserRequestParams(mName,mEmail,mPassword,mPasswordConfirmation ));
mBus.post(apiRequestEvent);

und dann, um mit der Antwort umzugehen:

@Subscribe
public void onSignupCompleted(ApiResponseAvailable event) {
    if (event.getResponseTo != "SIGNUP") return;
    System.out.println(String.format("in onSignupCompleted, got token = %s ", event.getParams().getToken()));

Vielleicht gibt es eine Möglichkeit, Generika zu verwenden?

Kann jemand erklären, wie ein Ereignisbus effektiv genutzt werden kann, wenn mehrere Ereignisse so gruppiert werden können?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage