Cześć, tworzę sobie apke w tej o to architekturze w Javie i mam pewien problem. Nie do końca wiem jak zaimplementować exception/error flow w aplikacji, tak by zmapowac go na odpowiedni http status powiedzmy na REST'cie. Interesuje mnie taki flow zarówno z domeny na inbound adaptery, jak i z outbound adapterów do domeny. Mógłby ktoś mi podpowiedzieć gdzie szukać wskazówek na ten temat albo samemu spróbować pomoc?
Zaciągasz vavra, w domenie zwracasz sobie Either<WrapperNaErrora, SuccessObject>
. Wrapper niech zawiera kod bledu i krotka wiadomosc dlaczego się nie powiodło. W infrastrukturze możesz stworzyć sobie jakąś klasę, która będzie przyjmować tego Eithera czyli np. Either<WrapperNaErrora, ?>
i tworzyć obiekt ResponseEntity, który wyplujesz na zewnątrz. Podobnie możesz zaimplementować wyjątki ale po co
- Either albo Option. Tak naprawdę często Option wystarczy, jeśli się udało to zwracasz wartość, a jeśli nie to pusty Option i go mapujesz na 404. W przypadku kolekcji może być to pusta kolekcja, jako domyślna.
- Jakieś obiekty zawierające opis błędów, np. enumy ze statusem zakończenia operacji
Jeśli nie chcesz/nie mozesz vavra a mozesz kotlina to można coś podobnego zasymulować też używając sealed class
. Masz sealed klase odpowiedzi i po niej dziedziczący sukces i porażki
eithervavr napisał(a):
Mógłbyś stworzyć taki przykładową klasę ktore będzie wypluwać ResponseEntity bo też jestem zainteresowany tym tematem, a nie do końca wiem jak to zrobić?
ResponseEntity resolveEither(Either<ResponseError, ?> data) {
return data
.map(ResponseEntity::ok)
.getOrElseGet(ValidationResolver::createErrorResponse);
}
gdzie createErrorResponse
przyjmuje ResponseError