将 TypeORM 实体模型 类 与 NestJS-GraphQL 模式类型结合使用是否好?
Is good to use TypeORM entity models classes in conjuction with NestJS-GraphQL schema type?
我正在创建 GraphQL API using NestJS and TypeORM。从 classic 用户实体开始,我创建了 user.type.ts
和 user.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;
// ...
问题是:因为它们使用相同的字段,我可以创建一个 class 来组合两个 class 的装饰器吗?
例如:
@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)确实有不同的目的。您还会发现在某些情况下需要从一种转换为另一种,而这样做需要将它们分开。
我正在创建 GraphQL API using NestJS and TypeORM。从 classic 用户实体开始,我创建了 user.type.ts
和 user.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;
// ...
问题是:因为它们使用相同的字段,我可以创建一个 class 来组合两个 class 的装饰器吗?
例如:
@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)确实有不同的目的。您还会发现在某些情况下需要从一种转换为另一种,而这样做需要将它们分开。