Я ищу шаблон Java для создания вложенной последовательности вызовов неблокирующих методов. В моем случае некоторый код клиента должен асинхронно вызывать службу для выполнения некоторого прецедента, и каждый шаг этого случая использования должен выполняться асинхронно (по причинам, выходящим за рамки этого вопроса). Представьте, что у меня есть существующие интерфейсы:
public interface Request {}
public interface Response {}
public interface Callback<R extends Response> {
void onSuccess(R response);
void onError(Exception e);
}
Существуют различные парные реализации интерфейсов Request
и Response
, а именно RequestA
+ ResponseA
(заданные клиентом), RequestB
+ ResponseB
(используемые службой внутри) и т.д..
Процесс обработки выглядит следующим образом:
Между получением каждого ответа и отправкой следующего запроса необходимо выполнить некоторую дополнительную обработку (например, на основе значений в любом из предыдущих запросов или ответов).
До сих пор я пробовал два подхода к кодированию этого в Java:
- анонимные классы: быстро становится уродливым из-за требуемой вложенности
- внутренние классы: более аккуратные, чем предыдущие, но все еще трудно для другого разработчика понять поток выполнения
Есть ли какой-нибудь шаблон, чтобы сделать этот код более удобочитаемым? Например, могу ли я выразить метод службы как список автономных операций, которые выполняются последовательно некоторым классом среды, который заботится о вложенности?