【发布时间】:2020-01-23 21:57:33
【问题描述】:
假设有不同的实体用户、角色、任务
所有这些实体都有createdBy、updatedBy、createdOn、updatedOn 的共同点。
我想知道如何创建一个基实体,以便所有实体都使用 Typeform 扩展嵌套 js 中的基类。
【问题讨论】:
假设有不同的实体用户、角色、任务
所有这些实体都有createdBy、updatedBy、createdOn、updatedOn 的共同点。
我想知道如何创建一个基实体,以便所有实体都使用 Typeform 扩展嵌套 js 中的基类。
【问题讨论】:
这是你应该使用继承的地方。
基本上,这个想法是有一个基类/实体,它收集公共逻辑或结构,而许多其他类/实体共享该公共逻辑。
例如: 猫、狗、大象都有相似的特征,所以我们可能希望将所有这些相似的特征集中在一个地方,以避免逻辑和代码的重复。
所以让我们看一个最简单的例子,只是为了基本理解。
export class Animal {
protected numberOfLegs: number;
protected sound(): void;
}
export class Dog extends Animal {
constructor() {
super();
this.numberOfLegs = 4;
}
sound(): void {
console.log('BARK');
}
}
满足您的需求:
导出基础实体。
import { Entity, Column } from 'typeorm';
export class BaseEntity {
@Column()
createdBy: string;
@Column()
updatedBy: string;
@Column()
createdOn: Date;
@Column()
updatedOn: Date;
}
然后从派生实体继承它。
import { Entity, Column } from 'typeorm';
import {BaseEntity} from './base-entity';
export class DerivedEntity extends BaseEntity {
@Column()
id: string;
...
}
请阅读继承,这是编程和 OOP 中基本且非常重要的原则。
【讨论】:
BaseEntity 删除@Entity 装饰将避免创建BaseEntity 表。编辑了帖子
createdBy 和updatedBy 是用户表的外键,所以我必须保持ForeignKey 与user 的关系吗?跨度>