Eu vejo muita gente usando DTOs ao invés de model como descrito no curso. Qual a diferença de usar Model, DTO ?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.