2017-08-23 1 views
1

Wenn wir mehrere Einheiten mit unterschiedlichen Beziehungen zwischen ihnen (. ZB Event --1-> Venue --*-> Rooms) JHipster erzeugt die folgenden für das Java-Back-End, was in Ordnung ist:starke Typisierung des Client-Modell in Schräg

@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 { 
} 

Das Ersatzmodell in Angular ist nicht so stark typisiert. Stattdessen verwendet das Modell die BaseEntity wenn es eine Beziehung ist:

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

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

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

Mit Typoskript würden wir sehr diesen Code eingeben profitieren und so konnten wir zwischen Objekten navigieren, wie zum Beispiel:

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

Es wäre darum, die Modellklassen ohne BaseEntity zu erzeugen, aber die Klassen selbst:

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? Gibt es einen Grund, warum das Angular-Modell nicht so getippt ist wie das Java-Modell?

Antwort

0

Der ursprüngliche Grund für die Einführung der BaseEntity (Es war von mir) war, zirkuläre Referenz in Typoskript zu vermeiden. Der Build dauerte ungewöhnlich lang und stürzte manchmal ab, wenn zwei Entitäten Beziehungen zueinander hatten, was dazu führte, dass das Entity-Modell für die Relation importiert wurde. Dies war die schnelle Lösung, die ich zu diesem Zeitpunkt finden konnte, um den Zirkelbezug zu vermeiden.

Hinweis: Dies wurde vor einiger Zeit gemacht und vielleicht gibt es das Problem nicht mehr mit dem neuesten Typescript und Webpack, so dass dies wahrscheinlich noch einmal überprüft werden kann.