Я устанавливаю новое веб-приложение. Существует API на основе Laravel, который взаимодействует с Angular Application. Теперь есть следующая ситуация, которая будет происходить несколько раз, и я не знаю, как правильно с ней справиться.
В качестве примера приведен набор пользователей и проектов. Обе модели связаны промежуточной таблицей / моделью ProjectTeam. Я попытался проиллюстрировать ситуацию на следующем рисунке:
Теперь, если пользователь входит в систему, я хочу загрузить данные пользователя с его проектами. Таким образом, мой API отправит мне JSON-подобный:
[
{
id: 12,
email: "example@mail.xy",
projects: [
{
name: "Project X",
created: 2019,
...
},
...
]
},
...
]
Но иногда я хочу загрузить команду проекта (например, для администрирования команды), и я получу JSON следующим образом: (Просто инвертированныйверсия)
[
{
name: "Project X",
created: 2019,
team: [
{
id: 12,
email: "example@mail.xy",
...
},
...
]
},
...
]
Теперь в моем угловом приложении я создаю объект для извлеченных данных:
export class Project {
name: string;
created: number | Date;
team: ProjectTeam;
constructor(data: ProjectAPI) {
this.name = data.name;
this.created = data.created;
this.team = new ProjectTeam(data.team);
}
}
export interface ProjectAPI { ... }
export class ProjectTeam {
members: []ProjectTeamMember;
constructor(data) {
this.members = data.map(elm => new ProjectTeamMember(elm));
}
}
export class ProjectTeamMember {
user: User;
...
constructor(data) {
this.user = new User(data);
}
}
export class User {
id: number;
projects: []Project;
...
constructor(data) {
this.id = data.id;
this.projects = data.projects ? data.projects.map(elm => new Project(elm)) : null;
// Here i would get a circular dependency
...
}
}
И я бы сделал то же самое, если бы мог, нотогда я получу круговую зависимость.
Так, как правильно решить эту проблему? Или вы не стали бы создавать экземпляры объектов и просто управлять вложенными данными через интерфейс?
Спасибо за ваши ответы:)