Metody w serwisie - refaktoryzacja kodu

0

Hejka, prośba o pomoc.
Powiedzmy, że mamy w kilku serwisach tą są samą funkcję sprawdzającą, np:

public void findUser(UserPrincipal userPrincipal) {
    userRepository.findByIdAndEmail(userPrincipal.getId(), userPrincipal.getEmail()).orElseThrow(()->
            new ResourceNotFoundException("UserProfile", "ID", userPrincipal.getUsername()));
}

W jaki sposób byście zrefaktorowali powyższy kod, żeby wydzielić gdzieś wyżej? Zwykły interfejs z metodą domyślną ?

Jako dodatek powiedzmy, że mamy kilka metod w serwisie. W każdej z tej metod na wstępie jest wywoływane findUser. Zostawić to w taki sposób, czy najlepiej to jakoś wszystko wydzielić wyżej ? Pytam, bo chcę zastosować dobrą praktykę, ale równocześnie nie chcę popaść w skrajność i "przedobrzyć"

Z pomysłów to AOP vs Interfejsy ?
Choć nie wiem, czy dobrze rozumiem implementacje w tym przypadku AOP:

  • tworzę osobną klasę do której insertuje wszystkie metody, które będą wykorzystywały findUser ? Jakoś to później to opisać, żeby połapać się w kodzie ?
3

Ja bym taką metodę stworzył w klasie UserService a tam gdzie ta metoda jest potrzebna tam wstrzykiwał UserService

3

Ja nie rozumiem tutaj za bardzo czemu masz ładnego optionala a wymieniasz go na wyjątek i jeszcze metoda jest void :( Zresztą sama nazwa też jest błędna bo ty przecież robisz jakieś verifyUserExists co najwyżej.
Co do reszty pytań to trudno powiedzieć nie widząc kodu. Niemniej generalnie nie zawsze podobnie wyglądający kod wymaga jakiejś "generalizacji".

0

@Shalom: dzięki, faktycznie muszę zmienić nazewnictwo. Rzucam wyjątek na Front, że dany zasób nie istnieje etc.
Hmm, reszta kodu nie wnosi bo dla przykładu serwis1, serwis2, serwis3 z różnymi metodami.
Każdy serwis ma funkcję findUser, która jest wykonywana w metodach serwisu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.