TypeORM에서 엔티티들이 공통으로 갖는 컬럼이 있는 경우에는 엔티티 상속을 통해 중복되는 코드를 제거할 수 있다.
@Entity('item_consumable')
export class ItemConsumable {
@PrimaryColumn()
code: number;
@Column()
name: string;
@Column({
enum: ItemType,
})
itemType: ItemType;
@Column({
enum: ItemGrade,
})
itemGrade: ItemGrade;
@Column()
hpRecover: number;
...
}
@Entity('item_wearable')
export class ItemWearable {
@PrimaryColumn()
code: number;
@Column()
name: string;
@Column({
enum: ItemType,
})
itemType: ItemType;
@Column({
enum: ItemGrade,
})
itemGrade: ItemGrade;
@Column()
attackPower: number;
...
}
code, name, itemType, itemGrade가 두 엔티티에서 공통으로 사용되고 있다.
export abstract class Common {
@PrimaryColumn()
code: number;
@Column()
name: string;
@Column({
enum: ItemType,
})
itemType: ItemType;
@Column({
enum: ItemGrade,
})
itemGrade: ItemGrade;
}
위와 같이 중복되는 컬럼에 대한 추상 클래스를 선언한 후
@Entity('item_consumable')
export class ItemConsumable extends Common {
@Column()
hpRecover: number;
...
}
@Entity('item_wearable')
export class ItemWearable extends Common {
@Column()
attackPower: number;
...
}
해당 클래스를 상속받아서 엔티티를 생성하면 된다.
'웹' 카테고리의 다른 글
[NestJS] Refactoring (2) - Custom Decorator (with TypeORM) (0) | 2024.05.23 |
---|---|
[React] MUI 컴포넌트에 CSS Module 적용하기 (MUI css 적용안될 때) (0) | 2023.11.21 |
[Nginx + Express] SSL 적용하기 (0) | 2023.11.08 |