Poszukuję wzorca Java do tworzenia zagnieżdżonej sekwencji nie blokujących wywołań metod. W moim przypadku, kod klienta musi asynchronicznie wywoływać usługę, aby wykonać pewien przypadek użycia, a każdy krok tego przypadku użycia musi być wykonany asynchronicznie (z przyczyn spoza zakresu tego pytania). Wyobraźmy sobie, mam istniejących interfejsów następująco:Wzorzec Java dla zagnieżdżonych wywołań zwrotnych?
public interface Request {}
public interface Response {}
public interface Callback<R extends Response> {
void onSuccess(R response);
void onError(Exception e);
}
Istnieją różne Sparowane implementacje interfejsów Request
i Response
, mianowicie RequestA
+ ResponseA
(podanych przez klienta), RequestB
+ ResponseB
(używany wewnętrznie przez serwis), etc. .
przetwarzanie wygląda następująco:
Pomiędzy otrzymaniem każdej odpowiedzi a wysłaniem następnego żądania, musi nastąpić dodatkowe przetwarzanie (np. na podstawie wartości z któregokolwiek z poprzednich wniosków lub odpowiedzi).
Do tej pory próbowałem dwa podejścia do kodowania w Java:
- klas anonimowych: szybko staje się brzydka z powodu wymaganych lęgowych
- klas wewnętrznych: neater niż wymienione powyżej, ale nadal trudno inny program do zrozumienia przepływu wykonania:
Czy jest jakiś wzór, aby ten kod był bardziej czytelny? Na przykład, czy mogę wyrazić metodę usługi jako listę samodzielnych operacji, które są wykonywane kolejno przez niektóre klasy framework, które zajmują się zagnieżdżaniem?
Wiem, że powiedziałeś, że nie blokowanie było koniecznością, ale czy jest jakikolwiek sposób, aby to ponownie rozważyć? Czy możesz na przykład utworzyć drugi wątek blokujący każde żądanie? Widziałem, że kod jest bardzo przejrzysty i ostrożny. –
samodzielne operacje będą nadal w jakiejś formie klas, anonimowe lub nie, ale nadal fizycznie obecne. będzie musiał poczekać, aż projekt lambda będzie miał bardziej naturalne konstrukcje dla takich rzeczy jak ty. Zakładam też, że potrzebujesz tego wszystkiego w paradygmatach "plain java"? Nie brzmi tak, jakbyś chciał zewnętrznej ramy orkiestracji –
@Rob I: Niestety, nie blokowanie jest koniecznością. –