Sto cercando un modello Java per creare una sequenza nidificata di chiamate di metodo non bloccanti. Nel mio caso, alcuni codici client devono richiamare in modo asincrono un servizio per eseguire alcuni casi d'uso e ogni fase di tale caso d'uso deve essere eseguita in modo asincrono (per ragioni che esulano dall'ambito di questa domanda). Immaginate Ho interfacce esistenti come segue:Pattern Java per callback annidati?
public interface Request {}
public interface Response {}
public interface Callback<R extends Response> {
void onSuccess(R response);
void onError(Exception e);
}
Ci sono diverse implementazioni accoppiate delle Request
e Response
interfacce, vale a dire RequestA
+ ResponseA
(fornite dal cliente), RequestB
+ ResponseB
(utilizzato internamente dal servizio), ecc .
Il trattamento è simile al seguente:
Tra la ricezione di ciascuna risposta e l'invio della richiesta successiva, è necessario che avvenga un'ulteriore elaborazione (ad es. in base ai valori in una qualsiasi delle precedenti richieste o risposte).
Finora ho provato due approcci per la codifica questo in Java:
- classi anonime: diventa brutto rapidamente a causa delle nidificazione
- classi interne richieste: più ordinato rispetto al precedente, ma ancora difficile per un altro sviluppatore per comprendere il flusso di esecuzione
C'è qualche schema per rendere questo codice più leggibile? Ad esempio, potrei esprimere il metodo di servizio come un elenco di operazioni autonome che vengono eseguite in sequenza da alcune classi di framework che si occupano del nesting?
So che hai detto che il non blocco era una necessità, ma esiste un modo per riconsiderare questo? Potresti creare un secondo thread che blocchi su ogni richiesta, ad esempio? Ho potuto vedere che il codice è molto chiaro con cura. –
le operazioni autonome saranno ancora in qualche forma di classi, anonime o meno, ma ancora fisicamente presenti. Dovremo aspettare che il progetto lambda abbia costrutti più naturali per cose come te. Immagino anche che tu abbia bisogno di tutto questo nei paradigmi "plain java"? Non sembra che ti piacerebbe un framework di orchestrazione esterna –
@Rob I: purtroppo, il non blocco è un must. –