Как эффективно использовать шину событий?

Сейчас я изучаю некоторые варианты для проекта обучения Android. Я пытаюсь общаться с моими rails api (также учебный проект).

После некоторых исследований, я думаю, что я остановился на схеме, которая использует retrofit и otto.

Что я в конечном итоге с этим. Когда я хочу позвонить на мой сервер 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())); 

Может быть, есть способ использовать дженерики?

Может ли кто-нибудь объяснить, как эффективно использовать шину событий, когда есть набор событий, которые могут быть сгруппированы вместе?

Вы переусердствуете – просто продолжайте и создавайте объект сообщения для каждого события.