publiczne właściwości DTO

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.

4

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

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

0

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

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.

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.

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ść.

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