Padrão Java para retornos de chamada aninhados?
Eu estou procurando um padrão de Java para fazer uma seqüência aninhada de chamadas de método não-bloqueio. No meu caso, algum código do cliente precisa chamar um serviço de forma assíncrona para executar algum caso de uso, e cada etapa desse caso de uso deve ser executada de forma assíncrona (por razões fora do escopo desta questão). Imagine que eu tenha interfaces existentes da seguinte maneira:
public interface Request {}
public interface Response {}
public interface Callback<R extends Response> {
void onSuccess(R response);
void onError(Exception e);
}
Existem várias implementações pareadas doRequest
eResponse
interfaces, nomeadamenteRequestA
+ ResponseA
(dado pelo cliente),RequestB
+ ResponseB
(usado internamente pelo serviço), etc.
O fluxo de processamento é assim:
Entre o recebimento de cada resposta e o envio da próxima solicitação, é necessário algum processamento adicional (por exemplo, com base nos valores de qualquer uma das solicitações ou respostas anteriores).
Até agora eu tentei duas abordagens para codificar isso em Java:
classes anônimas: fica feio rapidamente devido ao aninhamento necessárioclasses internas: mais puro do que o acima, mas ainda difícil para outro desenvolvedor compreender o fluxo de execuçãoExiste algum padrão para tornar esse código mais legível? Por exemplo, eu poderia expressar o método de serviço como uma lista de operações independentes que são executadas em seqüência por alguma classe de estrutura que cuida do aninhamento?