publiczne właściwości DTO

Odpowiedz Nowy wątek
2019-03-15 13:20
0

Witam,
Czy macie jakieś przeciwwskazania na używanie publicznego dostępu do właściwości w obiektach DTO?
Pytam z czystej ciekawości, gdzieś tam słyszałem, że niektórzy jak widzą publiczną właściwość to dostają ataku serca.

Pozostało 580 znaków

2019-03-15 13:25
4

Raczej tak, dostaje palpitacji serca jak ktoś setterami zmienia DTO. Hołduje zasadzie że DTO powinno być valueObject'em.

A możesz jakoś to uargumentować? Bo właściwie to napisałeś coś w stylu "robię tak bo tak" - Bibet 2019-03-15 13:41

Pozostało 580 znaków

2019-03-15 14:08
0

Ludzie dostają palpitacji serca, bo jest hype na niezmienność, programowanie funkcyjne, pola finalne (tak zwą się w javie, nie wiem jak w php) i valueObjects. I jest to mądry hype

Pozostało 580 znaków

2019-03-15 14:16
0

Coś mieszacie DTO != VO.
W DTO możesz mieć pola publiczne.
VO jest niemutowalne, pola masz prywatne, a setter zwraca nowy obiekt.

Pozostało 580 znaków

2019-03-15 14:24
0

@Kamil Żabiński:

Raz utworzony VO powinien być:

  • zawsze poprawny (edit: czyli albo powstaje, albo rzucany jest wyjątek),
  • niezmienny po utworzeniu
    I to jest w nim najfajniejsze, zawsze wiadomo czego sie po nim spodziewać.

@Bibet
"Czy macie jakieś przeciwwskazania na używanie publicznego dostępu do właściwości w obiektach DTO?"
Tak. Nigdy nie powinno to mieć miejsca.
W programowaniu to co nie jest zabronione to jest dozwolone. Inaczej: udostępniając taki dostęp umozliwiasz każdemu korzystającemu z tego DTO rozłożenie systemu.

edytowany 2x, ostatnio: ccwrc, 2019-03-15 14:25
Pokaż pozostałe 7 komentarzy
No da się wstawić stringa zamiast inta :P Miałeś racje ;) - Bibet 2019-03-15 15:13
No widzisz. To z serem, szynką i masełkiem też nie będzie problemu. - ccwrc 2019-03-15 15:17
no racja, tylko ze jednak DTO i tak potem trafi do klasy która nie przepuści złego typu - Bibet 2019-03-15 15:18
Kod poprosimy :) - ccwrc 2019-03-15 15:20
zaufaj mi na słowo :D - Bibet 2019-03-15 15:34

Pozostało 580 znaków

2019-03-15 15:20
1

Z tego co się orientuję, to DTO służy do przenoszenia danych między warstwami. W jednej warstwie go tworzysz, a w innej sobie używasz tych wartości. Po kiego grzyba Ci setter? Jeżeli potrzebujesz jakoś poskładać tego DTO, to użyj sobie buildera.

No po nic ;) Potrzebne mi są tylko gettery, a ustawienie właściwości na public jest szybsze niż kliknięcie ALT + insert / wybranie 'getters...' i zaznaczenie wszystkiego w PHPStormie :v Nie no tak ogólnie to nie żebym był leniwy ALE teraz wnioskuje, że w moim przypadku publiczne właściwości nie będą złe. - Bibet 2019-03-15 15:33

Pozostało 580 znaków

2019-03-15 15:38
2

@Bibet: Oczywiście, że będą. Zwłaszcza w PHP, gdzie nie ma (jeszcze) typowanych pól klasy. W Javie to jeszcze jak Cie mogę, bo tam chronią Cie typy, ale w PHP? Zwrócisz gdzieś DTO, a ktoś sobie tam wpierdzieli tablicę zamiast obiektu, albo zamiast false przypisze 0 lub 1, a Ty na przykład później używasz tego pola z potrójnym porównaniem i jesteś w dupie.

Poza tym jak masz getter, to łatwiej jest zmienić wew. implementację. Ktoś sobie wywołuje getX i nie obchodzi go jak to X jest składane. Możesz sobie pod spodem tam robić różne dziwne rzeczy. Jak X jest publiczne, to tracisz tą możliwość.

edytowany 1x, ostatnio: Desu, 2019-03-15 15:41

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0