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



我正在使用NestJS和TypeORM创建GraphQL API。从经典的User实体开始,我创建了user.type.tsuser.entity.ts,如Nestjs文档所述。

这是一个内容示例:

  • user.entity.ts
@Entity({ schema: 'mydb', name: 'userList' })
export class User {
@Column('varchar', { name: 'guid', unique: true, length: 36 })
guid: string;
@Column('varchar', { name: 'firstName', length: 50 })
firstName: string;
@Column('varchar', { name: 'lastName', length: 100 })
lastName: string;
// ...
  • user.type.ts
@ObjectType()
export class UserType {
@Field({
name: 'ID',
description: 'Global Universal ID of the User',
})
guid: string;
@Field()
firstName: string;
@Field()
lastName: string;
// ...

问题是:既然它们使用相同的字段,我可以创建一个单独的类来组合两个类的装饰器吗?

例如:

@Entity({ schema: 'mydb', name: 'userList' })
@ObjectType()
export class User {
@Column('varchar', { name: 'guid', unique: true, length: 36 })
@Field({
name: 'ID',
description: 'Global Universal ID of the User',
})
guid: string;
@Field()
@Column('varchar', { name: 'firstName', length: 50 })
firstName: string;
@Field()
@Column('varchar', { name: 'lastName', length: 100 })
lastName: string;

它是反模式吗?这样做有什么局限性或缺点吗?

提前感谢

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

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

我遇到了实体与对象不精确匹配的情况。我有产品订单,但我只存储productId并解析来自不同系统的新产品数据。

在这里,我认为为了类型安全起见,将两者分开更有意义。我没有得到真正的product{}对象,只有productId,但typescript认为我两者都有。

最新更新