Je suis à la recherche d'un Java motif pour rendre une séquence imbriquée de non-blocage des appels de méthode. Dans mon cas, certains code client doit asynchrone invoquer un service pour effectuer certains cas d'utilisation, et chaque étape de ce cas d'utilisation se doit d'être exécutée de manière asynchrone (pour des raisons en dehors de la portée de cette question). Imaginez, j'ai des interfaces existantes comme suit:
public interface Request {}
public interface Response {}
public interface Callback<R extends Response> {
void onSuccess(R response);
void onError(Exception e);
}
Il existe différents jumelé implémentations de l' Request
et Response
interfaces, à savoir l' RequestA
+ ResponseA
(fourni par le client), RequestB
+ ResponseB
(utilisé en interne par le service), etc.
Le flux de traitement ressemble à ceci:
Entre la réception de chaque réponse et l'envoi de la demande suivante, un traitement supplémentaire qui doit arriver (par exemple, basé sur des valeurs dans l'une quelconque des précédentes requêtes ou réponses).
Jusqu'à présent, j'ai essayé deux approches de codage en Java:
- anonyme classes: devient laid rapidement en raison de la nécessaire imbrication
- les classes internes: plus soignée que la précédente, mais encore difficile pour un développeur de comprendre le flux d'exécution
Est-il un motif pour rendre ce code plus lisible? Par exemple, pourrais-je exprimer la méthode de service comme une liste d'opérations unitaires qui sont exécutés dans l'ordre par certains cadres de la classe qui prend soin de l'imbrication?