Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Qual a diferença entre Model e DTO?

Eu vejo muita gente usando DTOs ao invés de model como descrito no curso. Qual a diferença de usar Model, DTO ?

5 respostas
solução!

Oi Feilpe, tudo bem? O Model normalmente descreve as entidades do sistema e seus comportamentos, ou seja, é onde deveriam estar a maior parte das regras de negócio de uma aplicação. O DTO por outro lado, normalmente se usa para representar quais dados e em que formatos uma determinada camada aceita e trabalha. Então é comum por exemplo que você use DTOs para validar se o POST enviado para alguma url segue os parâmetros esperados, seus tipos e se seus valores estão dentro das regras de aceite da validação.

Entende?

Claro, pode haver divergências nos projetos sobre como esses conceitos podem estar implementados, porém, em linhas gerais, a diferença é essa.

Então eu posso ter models e DTOs no mesmo projeto? Como usar um Model de User mais genérico e usar DTOs para validar rotas especificas como por exemplo "limitar" o que eu poderia receber no endpoint de UPDATE?

Oi Felipe, sim, você pode ter os dois no projeto. O DTO você sempre usaria nas suas rotas por exemplo para dizer quais dados você espera receber naquele endpoint. No fim das contas todo DTO é convertido para um ou mais models dependendo do caso.

Um exemplo seria no cadastro de usuário por exemplo, se você recebe e-mail e senha, o DTO poderia ser:

// cria user dto
export class CreateUserDTO {
    email: string;
    senha: string;
}

Mas seu model, pode ter mais coisas como por exemplo o seu id e seu nível de permissão:

export class User {
    private id: string;
    private email: string;
    private senha: string;
    private level: string;
}

Poxa muito obrigado esclareceu demais!

E qual seria a diferença entre eu chamar um

user.entity.ts OU user.model.ts ?

Só nomenclatura? Ou teria alguma diferença entre entidade e model?

Opa Felipe, no seu exemplo, eles quase são equivalentes, normalmente entity tem uma ligação mais forte com ORM, onde a entidade representa uma "tabela no banco de dados", mas você pode ter models por exemplo que não precisam ser necessariamente persistidos no banco de dados. É mais comum que os dois se mesclem e o nome que você usa no final é apenas um detalhe. Vão haver variações de projeto para projeto.