Obecnie tworzę REST-API dla projektu i czytam artykuł o artykule o najlepszych praktykach. Wiele z nich wydaje się być przeciwnych DTO i po prostu ujawnia model domeny, podczas gdy inni wydają się uważać, że DTO (lub modele użytkowników, czy jakkolwiek chcesz to nazwać) są złą praktyką. Osobiście uważałem, że ten artykuł ma dużo sensu.
Rozumiem jednak również wady DTO z całym dodatkowym kodem mapującym, modelami domen, które mogą być w 100% identyczne z ich odpowiednikami w DTO i tak dalej.
Nasze API jest tworzone głównie po to, aby inni klienci mogli korzystać z danych, jednak jeśli zrobimy to dobrze, chcielibyśmy również użyć go do naszego własnego internetowego interfejsu GUI, jeśli to możliwe.
Chodzi o to, że możemy nie chcieć ujawniać wszystkich danych domeny innym użytkownikom klienta. Wiele danych ma sens tylko w naszej aplikacji internetowej. Ponadto możemy nie chcieć ujawniać wszystkich danych o obiekcie we wszystkich scenariuszach, zwłaszcza relacji z innymi obiektami i tak dalej. Na przykład, jeśli ujawnimy listę określonego obiektu, niekoniecznie będziemy chcieli ujawnić całą hierarchię obiektów; aby dzieci obiektu nie były ujawniane, ale można je było wykryć poprzez linki (hateoas).
Jak mam rozwiązać ten problem? Zastanawiałem się nad użyciem miksów Jacksona w naszych modelach domeny, aby kontrolować, jakie dane zostaną ujawnione w różnych scenariuszach. A może powinniśmy po prostu używać DTO do końca - nawet biorąc pod uwagę jego wady i kontrowersje?