Ich erstelle derzeit eine REST-API für ein Projekt und habe Artikel für Artikel über Best Practices gelesen. Viele scheinen gegen DTOs zu sein und legen einfach nur das Domänenmodell offen, während andere DTOs (oder Benutzermodelle oder wie auch immer Sie es nennen möchten) für eine schlechte Praxis halten. Persönlich dachte ich, dass dieser Artikel sehr viel Sinn macht.
Ich verstehe jedoch auch die Nachteile von DTOs mit all dem zusätzlichen Mapping-Code, Domänenmodellen, die möglicherweise zu 100% mit ihrem DTO-Gegenstück identisch sind, und so weiter.
Unsere API wurde größtenteils so erstellt, dass andere Clients Daten verwenden können. Wenn wir es jedoch richtig machen, möchten wir sie nach Möglichkeit auch für unsere eigene Web-GUI verwenden.
Die Sache ist, dass wir möglicherweise nicht alle Domänendaten für die anderen Clientbenutzer verfügbar machen möchten. Ein Großteil der Daten ist nur in unserer eigenen Webanwendung sinnvoll. Außerdem möchten wir möglicherweise nicht in allen Szenarien alle Daten zu einem Objekt verfügbar machen, insbesondere nicht zu Beziehungen zu anderen Objekten usw. Wenn wir beispielsweise eine Liste eines bestimmten Objekts verfügbar machen, möchten wir nicht unbedingt die gesamte Objekthierarchie verfügbar machen. damit die Kinder des Objekts nicht entlarvt werden, sondern über Links (Hateoas) entdeckt werden können.
Wie soll ich dieses Problem lösen? Ich habe darüber nachgedacht, Jackson-Mixins in unseren Domain-Modellen zu verwenden, um zu steuern, welche Daten in verschiedenen Szenarien verfügbar gemacht werden. Oder sollten wir nur DTOs verwenden - trotz ihrer Nachteile und Kontroversen?