Atualmente, estou criando uma API REST para um projeto e tenho lido artigos e artigos sobre melhores práticas. Muitos parecem ser contra os DTOs e simplesmente expõem o modelo de domínio, enquanto outros parecem pensar que os DTOs (ou Modelos de Usuário ou o que você quiser chamar) são uma má prática. Pessoalmente, pensei que este artigo fazia muito sentido.
No entanto, também entendo as desvantagens dos DTOs com todo o código de mapeamento extra, modelos de domínio que podem ser 100% idênticos aos de seus equivalentes e assim por diante.
Nossa API é criada principalmente para que outros clientes possam consumir dados; no entanto, se fizermos o certo, também gostaríamos de usá-lo para nossa própria GUI da Web, se possível.
A questão é que talvez não desejemos expor todos os dados do domínio para os outros usuários clientes. Muitos dos dados só farão sentido em nosso próprio aplicativo da web. Além disso, talvez não desejemos expor todos os dados sobre um objeto em todos os cenários, especialmente relacionamentos com outros objetos e assim por diante. Por exemplo, se expusermos uma lista de um objeto em particular, não desejaríamos necessariamente expor toda a hierarquia do objeto; para que os filhos do objeto não sejam expostos, mas possam ser descobertos através de links (hateoas).
Como devo resolver esse problema? Eu estava pensando em usar mixins Jackson em nossos modelos de domínio para controlar quais dados seriam expostos em diferentes cenários. Ou devemos apenas usar DTOs o tempo todo - mesmo considerando suas desvantagens e controvérsias?