在Angular中强类型客户端模型

时间:2017-08-23 14:51:26

标签: jhipster

当我们有几个具有不同关系的实体时(例如Event --1-> Venue --*-> Rooms),JHipster为Java后端生成以下内容,这很好:

@Entity
public class Event implements Serializable {
  @ManyToOne
  private Venue venue;
}

@Entity
public class Venue implements Serializable {
  @OneToMany(mappedBy = "venue")
  private Set<Room> rooms = new HashSet<>();
}

@Entity
public class Room implements Serializable {
}

Angular中的等效模型不是强类型的。相反,当存在关系时,模型使用BaseEntity

export class Event implements BaseEntity {
  constructor(public venue?: BaseEntity) {}
}

export class Venue implements BaseEntity {
  constructor(public rooms?: BaseEntity[]) {}
}

export class Room implements BaseEntity {
  constructor( ) {}
}

使用TypeScript,我们将非常有利于键入此代码,以便我们可以在对象之间导航,例如:

this.event.venue.rooms;
this.event.venue.rooms[0].name;

这将是生成没有BaseEntity的模型类但是类本身的问题:

export class Event implements BaseEntity {
  constructor(public venue?: Venue) {}
}

export class Venue implements BaseEntity {
  constructor(public rooms?: Room[]) {}
}

export class Room implements BaseEntity {
  constructor( ) {}
}

WDYT?有没有理由为什么Angular模型不像Java那样输入?

1 个答案:

答案 0 :(得分:0)

引入BaseEntity(由我来)的原因是为了避免在Typescript中使用循环引用。 构建过程异常漫长,当两个实体彼此建立关系导致实体模型相互导入实体模型时,有时会崩溃。这是我当时可以找到的快速解决方案,以避免循环引用。

注意:这是在一段时间后完成的,也许问题不再存在,使用最新的Typescript和Webpack,所以可能会重新访问。