Nadmiarowe użycie optionali w springowym repository

Nadmiarowe użycie optionali w springowym repository
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:29 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
1
Charles_Ray napisał(a):

Jeśli zależy Ci na większej „ekspresji typów” to pewnie Vavr będzie dobrym kierunkiem. Tylko wtedy wchodzisz w Eithery, mapy, flatmapy co tez ma swoją wysoka cenę jeśli chodzi o czytelność. Jak zawsze - trade off.

Można używać Vavr i nie używać Either. IHMO dla samych kolekcji warto używać Vavr.
BTW mapy i flatmapy są też dla Optional. Kto nie flatmapował Optionala ten jeszcze nie używał go w pełni :P


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:25 minut
  • Postów:1875
0

Tak, ale wtedy mówimy raczej o punktowym użyciu tych operatorów (w ramach metody, klasy), nie latają przez wszystkie warstwy itd jak w podejściu reaktywnym. Przynajmniej taka jest moja percepcja tego tematu :)


”Engineering is easy. People are hard.” Bill Coughran
GR
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:18
0
Koziołek napisał(a):

@grzechup: ja zadam ci inne pytanie. Załóżmy na chwilę, że zamiast Optional masz null i możesz dowolnie rzucać NPE.

Czy fragment:

Kopiuj
if(!opt.Company == null){
 return Response.create(ResultCode.COMPANY_NOT_EXIST);
}

będzie występować w twoim kodzie?

Tak, co imo byłoby i tak lepsze bo wtedy zniknęła by wszędzie w takich miejscach linijka opt.Company.get(), co uszczupliło by kod całkowicie o kilkadziesiąt linijek.

Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:15 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
1

Po co jednak używasz Optional.get? Co do zasady nie rozpakowujemy kontenera takiego jak Optional, bo możemy źle skończyć. Zamiast tego można użyć Optional.map i w ten sposób modyfikować wartość.

Zamiast kodu:

Kopiuj
Company zBazyDancych(){
    //…
   var optCompany = zapytanie();
   // …
   Company company = optCompany.get();
   company = zróbFikuMiku(company);
   // …
   return company;
}

Można napisać:

Kopiuj
Optional<Company> zBazyDancych(){
    //…
   var optCompany = zapytanie();
   // …
   return optCompany.map(this::zróbFikuMiku);
}

Jeżeli potrzebujesz się dostać do bebechów Company, to zawsze możesz użyć Optional.flatMap. Jak już wspomniałem. Nie ma potrzeby wypakowywania kontenera.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
AK
Znów chodzi o zrozumienie istoty
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0
Charles_Ray napisał(a):

Tak, ale wtedy mówimy raczej o punktowym użyciu tych operatorów (w ramach metody, klasy), nie latają przez wszystkie warstwy itd jak w podejściu reaktywnym. Przynajmniej taka jest moja percepcja tego tematu :)

To jest ważne rozróznienie. Nie tylko reaktywne / klasyczne
Czym innym jest użycie "kontenerka" w kodzie wyłącznie swoim, czym innym na stykach API (nie mówię WebAPI).
Jak w jakiejś komedii o komunie, ten inteligentny w środku hierarchii wygłasza: idiota na górze, idiota na dole - przypomniało mi się.


Bo C to najlepszy język, każdy uczeń ci to powie

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.