Angular 5 - 循环依赖

时间:2018-03-27 05:58:26

标签: angular typescript angular5 circular-dependency

正在开发一个在其模型中具有循环依赖关系的项目。 我给了this StackOverflow post并且它的解决方案是一个读取,但因为它表明循环依赖通常是一个混合问题的情况,我不认为我的方案属于该类别。

所以虽然他们只是警告,但我想我会查询这是不正确的方式来解决我的下列情况:

关联模式

你有3个型号:

  1. public class Person{
        Id: number;
        Name: string;
    
        Vehicles: Vehicle[];
    }
    
  2. 车辆

    public class Vehicles{
        Id: number;
        Model: string;
        CurrentOwnerId: number;
    
        CurrentOwner: Person;
        OwnerRecords: OwnerRecord[];
    }
    
  3. OwnerRecord

    public class OwnerRecord{
        Id: number;
        PersonId: number;
        VehicleId: number;
    
        PersonObj: Person;
        VehicleObj: Vehicle;
    }
    
  4. 一个人可以拥有一辆车。 Vehicle的当前所有者由Vehicle上的CurrentOwnerId字段给出。 OwnerRecord是一个链接表,可以表示历史所有权数据,从而将车辆链接到人。

    使用案例

    在一个屏幕上,您可能想要查看车辆的所有权历史记录,因此Vehicle模型可以具有OwnerRecord[]属性。如前所述,车辆上也可以有CurrentOwnerId,因此,CurrentOwner: Person属性。

    一个人可能希望显示他们的车辆清单,因此,他们可以拥有Vehicle[]财产。

    OwnerRecords显然拥有PersonVehicle属性。 车辆的当前所有者将没有OwnerRecord,因为这些只会在更改所有者时填充,因此这纯粹是为了历史所有者记录。

    解释

    当知道循环依赖永远不会在我从后端检索它们后永远不会填充这些对象的前提下,这是不正确的吗?

    如果没有在构建时获得这些警告,还有什么可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

我不确定你是以正确的方式拍摄你的模特。

鉴于此(简化)模型

export class Person {
  id: string;
  full_name: string;
  current_vehicle_id: string;
}

export class Vehicle {
  id: strnig;
  brand: string;
  model: string;
  current_owner: string;
}

export class OwningRecord {
  id: string;
  person_id: string;
  vehicle_id: string;
}

如果您想查看车辆的所有权,则无需访问任何车辆财产。您在记录中拥有所需的一切,即与车辆相关的用户。

只需显示与车辆匹配的记录列表。

如果要显示用户的车辆列表,请再次显示该记录。只需显示与此人匹配的车辆列表。

如果您遵循此规则,您的案件将不会受到环流依赖。