Nadmiarowe użycie optionali w springowym repository

Nadmiarowe użycie optionali w springowym repository
KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5550
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

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1910
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 :)

GR
  • Rejestracja: dni
  • Ostatnio: dni
  • 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
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6822
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.

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • 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ę.

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.