Eu vejo muita gente usando DTOs ao invés de model como descrito no curso. Qual a diferença de usar Model, DTO ?
Eu vejo muita gente usando DTOs ao invés de model como descrito no curso. Qual a diferença de usar Model, DTO ?
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.