• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gettery I Settery

0 głosów
155 wizyt
pytanie zadane 30 listopada 2020 w Java przez Kuciniak Użytkownik (940 p.)

Witam, mam pytanie odnośnie "zasad" przy getterach i setterach. Jakie są ogólne zasady przy ich używaniu i co w nich może być? Np. czy umieszczenia scannera w getterze jest akceptowalne? Czy jest to błąd? A jeśli tak to czy np. this.setName(getName()); jest dobrym rozwiązaniem?
Poniżej daje kod żeby to zobrazować.

public void getDataPerson() {
    this.setFirstName(getFirstName());
}
public String getFirstName() {
    System.out.println("Podaj imię: ");
    firstName = scanner.nextLine();
    return firstName;
}
public void setFirstName(String firstName) {
    if (!checkCorrectText(firstName) && !firstName.isEmpty()) {
        this.firstName = firstName;
    } else {
        System.out.println("Niedozwolone znaki (imię)");
        this.setFirstName(getFirstName());
    }
}

 

1 odpowiedź

+2 głosów
odpowiedź 30 listopada 2020 przez Wiciorny Mędrzec (184,510 p.)
wybrane 3 grudnia 2020 przez Kuciniak
 
Najlepsza

Geter i seter służy do ustawiania, pobierania zmiennych "pól" klasy.
Generalnie w getrach i seterach nie powinno być innej logiki - według zasad, funkcja powinna  mieć jednoznaczną funkcjonalność, czyli tzw. pojedynczą odpowiedzialność. 
Nie powinna robić "dodatkowych rzeczy" do których nie jest przeznaczona 

Generalnie odchodzi się od stosowania również SETERÓW w większości przypadków, korzysta sie w ten sposób z konstruktora parametryzowanego. 

scannera w getterze jest akceptowalne? 

umieszczanie scannera jest niedopuszczalne. I jest to duży błąd. 

this.setName(getName());

A co jeśli aktualnie "getName" jest nullem? i po co ustawiasz da obiektu "this... czyli instancji obiektu" próbujesz ustawić pobierając wartość "getName()" dla tego obiektu ? 

Zrozum wpierw czym jest this, i jak działają metody w ramach INSTANCJI OBIEKTU 

komentarz 30 listopada 2020 przez Ehlert Ekspert (205,150 p.)

Ja dodam od siebie że warto użyć lombocka, oraz dla obiektów typu dto nieźle sprawdzają się Recordy z nowszej Javy. yes

1
komentarz 30 listopada 2020 przez Wiciorny Mędrzec (184,510 p.)

Obiektów typu DTO, nie ma czegoś takiego jak obiekt typu DTO :)... bo jeśli ktoś nie pracuje z ORM to nie istnieje opjęcie Data To Object, więc obiekt nie jest "wtedy  tylko encją danych"

Lombok- może, ale raczej nie polecam bo to powoduje że potem nie wiesz co się dzieje, w kodzie i Lombok jest okej własnie dla może POJO, może DTO, ale dla naprawdę doświadczonych i powinien ograniczyć się do właściwie metod obiektu a nie stosować go wszedzie  bo potem  taki programista "niby coś wie" ale nic nie wie bo wszyzstko robił  za pomocą frameworków i adnotacji

 

  1. DTO to Data Transfer Object, czyli obiekt służący do transferu danych po sieci i innego sensu to nie ma.

a jeśli po prostu tworzysz jakąś klase, to chyba pomyliłeś z POJO :)  

1
komentarz 30 listopada 2020 przez Borys0 Początkujący (400 p.)

1. DTO to Data Transfer Object, czyli obiekt służący do transferu danych po sieci i innego sensu to nie ma.

DTO służy do transferu danych nie tylko po sieci, ale też wewnątrz aplikacji pomiędzy warstwami, zresztą to nie jedyne możliwości.

Lombok- może, ale raczej nie polecam bo to powoduje że potem nie wiesz co się dzieje, w kodzie i Lombok jest okej własnie dla może POJO, może DTO, ale dla naprawdę doświadczonych i powinien ograniczyć się do właściwie metod obiektu a nie stosować go wszedzie  bo potem  taki programista "niby coś wie" ale nic nie wie bo wszyzstko robił  za pomocą frameworków i adnotacji

Potwierdzam. Dodam jeszcze od siebie, że raz próbowałem użyć lomboka w istniejącej aplikacji i przestała działać, wtedy od doświadczonego programisty usłyszałem coś podobnego.

1
komentarz 30 listopada 2020 przez Wiciorny Mędrzec (184,510 p.)
Data Transfer Object w skrócie DTO jest wzorcem projektowym należącym do grupy wzorców dystrybucji. Podstawowym zadaniem DTO jest transfer danych pomiędzy systemami, aplikacjami lub też w ramach aplikacji pomiędzy warstwami aplikacji, modułami lub też w każdej dowolnej sytuacji, w której transfer danych jest konieczny. DTO

Ale nie należy tego ograniczać do spirnga, bo ludzie widzą tylko JAVA-SPRING :D i ograniczają się do adnotacji, generalnie Borys bo problem jest w tym, że fajnie stosować coś "NOWEGO" FAJNEGO bo to ułatwia, ale przez to że jest nowe, nigdy nie wiemy co moze powodować za problemy w przyszłości, których rozwiązań trzeba będzie szukać od korzeni, bo nie będą one znane.
komentarz 30 listopada 2020 przez Ehlert Ekspert (205,150 p.)

nie należy tego ograniczać do spirnga, bo ludzie widzą tylko JAVA-SPRING

Dto używałem zarówno w Symfony, jak i w Neście. Warto tu zaznaczyć że frameworki nic do tego nie miały. Wszystko ma swoje zastosowanie, ale w granicach rozsądku wink

Podobne pytania

0 głosów
1 odpowiedź 140 wizyt
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 30 kwietnia 2018 w Java przez Adrian Paź Obywatel (1,270 p.)
0 głosów
1 odpowiedź 36 wizyt
pytanie zadane 2 dni temu w Python przez doskanoness Użytkownik (520 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

85,698 zapytań

134,499 odpowiedzi

298,515 komentarzy

56,625 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...