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.
publiczne właściwości DTO
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5
- Rejestracja: dni
- Ostatnio: dni
- Postów: 373
Raczej tak, dostaje palpitacji serca jak ktoś setterami zmienia DTO. Hołduje zasadzie że DTO powinno być valueObject'em.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Silesia/Marki
- Postów: 5555
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 21
Coś mieszacie DTO != VO.
W DTO możesz mieć pola publiczne.
VO jest niemutowalne, pola masz prywatne, a setter zwraca nowy obiekt.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 413
@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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1788
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1788
@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ść.