Как эффективно использовать шину событий?
Прямо сейчас я изучаю некоторые варианты проекта обучения Android. Я пытаюсь общаться с моим рельсы API (также учебный проект).
После некоторого исследования, я думаю, я остановился на схеме, которая использует модернизацию и Отто.
Что я в конечном итоге это. Когда я хочу позвонить на мой сервер rails (в этом случае выполнить регистрацию), я делаю это в упражнении.
mBus.post(new SignupRequestEvent(new UserRequestParams(mName,mEmail,mPassword,mPasswordConfirmation )));
и затем в той же деятельности у меня есть это.
@Subscribe
public void onSignupCompleted(SignupCompletedEvent event) {
System.out.println(String.format("in onSignupCompleted, got token = %s ", event.getParams().getToken()));
}
Проблема здесь заключается в том, что в каждом конкретном случае каждый тип запроса API и соответствующий ему тип ответа будет уникальным типом события и потребует своего собственного класса, который выглядит как много кода типа базовой платы.
Например, для обработки входа и выхода мне понадобятся эти два класса:
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;
}
}
И я думаю, что большинство классов событий были бы в значительной степени идентичны.
Я думаю, что мне просто нужно иметь 2 события для вызовов API, одно для запросов и одно для ответов, но тогда каждый метод, который получает событие ответа API, должен будет проверить, является ли это ответом на требуемый запрос.
Эта опция будет означать что-то вроде этого:
ApiRequestEvent apiRequestEvent = new ApiRequestEvent();
apiRequestEvent.setAction("SIGNUP");
apiRequestEvent.setParameters(new UserRequestParams(mName,mEmail,mPassword,mPasswordConfirmation ));
mBus.post(apiRequestEvent);
а затем обработать ответ примерно так:
@Subscribe
public void onSignupCompleted(ApiResponseAvailable event) {
if (event.getResponseTo != "SIGNUP") return;
System.out.println(String.format("in onSignupCompleted, got token = %s ", event.getParams().getToken()));
Может быть, есть способ использовать дженерики?
Может кто-нибудь объяснить, как эффективно использовать шину событий, когда есть ряд событий, которые можно сгруппировать, как это?