Typescript 将TypeForm实体模型类与NestJS GraphQL模式类型结合使用好吗?

Typescript 将TypeForm实体模型类与NestJS GraphQL模式类型结合使用好吗?,typescript,graphql,nestjs,dry,typeorm,Typescript,Graphql,Nestjs,Dry,Typeorm,我正在使用和创建一个API。从经典用户实体开始,我创建了User.type.ts和User.entity.ts,如Nestjs文档所述 这是内容的一个示例: user.entity.ts @实体({schema:'mydb',name:'userList'}) 导出类用户{ @列('varchar',{name:'guid',unique:true,长度:36}) guid:字符串; @列('varchar',{name:'firstName',长度:50}) 名字:字符串; @列('var

我正在使用和创建一个API。从经典用户实体开始,我创建了
User.type.ts
User.entity.ts
,如Nestjs文档所述

这是内容的一个示例:

  • user.entity.ts
@实体({schema:'mydb',name:'userList'})
导出类用户{
@列('varchar',{name:'guid',unique:true,长度:36})
guid:字符串;
@列('varchar',{name:'firstName',长度:50})
名字:字符串;
@列('varchar',{name:'lastName',长度:100})
lastName:string;
// ...
  • user.type.ts
@ObjectType()
导出类用户类型{
@场({
名称:“ID”,
描述:“用户的全局通用ID”,
})
guid:字符串;
@字段()
名字:字符串;
@字段()
lastName:string;
// ...
问题是:既然它们使用相同的字段,我可以创建一个组合了两个类的装饰器的类吗

例如:

@实体({schema:'mydb',name:'userList'})
@ObjectType()
导出类用户{
@列('varchar',{name:'guid',unique:true,长度:36})
@场({
名称:“ID”,
描述:“用户的全局通用ID”,
})
guid:字符串;
@字段()
@列('varchar',{name:'firstName',长度:50})
名字:字符串;
@字段()
@列('varchar',{name:'lastName',长度:100})
lastName:string;
这是一种反模式吗?这样做有任何限制或缺点吗


提前感谢

你可以按照你的建议去做。这不是问题。这是个人的喜好


但是,您可能会很快了解到,尽管从数据结构的角度来看,实体和GraphQL对象(或者用NestJS术语来说,数据传输对象或DTO)具有相同的形状确实有不同的目的。在某些情况下,您还会发现需要从一个转换到另一个,并且这样做需要将它们分开。

Hi!感谢您的回复!我一直在使用DTO和REST,但在graphql中,我认为它们是无用的,因为字段映射和验证是由graphql完成的。此外,对于参数我使用的是一个分离的类。我上面提到的混合类只用于gql负载,我可以很容易地用graphl decorators隐藏/转换/扩展字段。现在我真的看不出把它们分开有什么意义。你能给我一个真实的例子吗?@Joseph-我可以举一个很好的例子当您的API字段名应该不同于数据库的字段名时。如果您同时构建实体和GraphQL对象,您将不得不使用相同的API名称和实体字段名。这似乎不是问题,但可以。谢谢!是的,我也这么想,但实际上,使用Nestjs上的@field decorator,您可以定义字段名的映射。例如:
@field({name:ID})guid:string;
这意味着您的数据库字段被称为guid,但它以ID的形式公开。您也可以使用@HideField之类的内容。目前我看不到限制,但我也会尝试找出它们