【问题标题】:Angular 5 - Circular DependenciesAngular 5 - 循环依赖
【发布时间】:2018-03-27 05:58:25
【问题描述】:

一直在研究一个模型之间存在循环依赖关系的项目。 我给了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. 所有者记录

    public class OwnerRecord{
        Id: number;
        PersonId: number;
        VehicleId: number;
    
        PersonObj: Person;
        VehicleObj: Vehicle;
    }
    

一个人可以拥有一辆车。 Vehicle 的当前所有者由 Vehicle 上的 CurrentOwnerId 字段给出。 OwnerRecord 是一个链接表,可以表示历史所有权数据,从而将 Vehicles 与 People 链接起来。

用例

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

一个人可能希望显示他们的车辆列表,因此,他们可以有一个Vehicle[] 属性。

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

解读

如果知道在从后端检索这些对象后永远不会填充这些对象的前提下,循环依赖永远不会得到满足,这肯定不是不正确的吗?

如果在构建时没有收到这些警告,那要怎么做呢?

【问题讨论】:

  • 我认为最好将 CurrentOwner:Person 更改为 CurrentOwnerId:number (其中 CurrentOwnerId 是 Person 的 id "key")
  • 你不需要在任何地方都使用人,而是可以在两个模型中使用 ownerRecord。
  • @Eliseo - 我不确定我是否完全理解您提出的解决方案?
  • @HarshalPatil - 我会更新我的问题,但我认为我不能这样做,因为车辆的当前所有者(由 Vehicle -> CurrentOwnerId 给出)还没有 OwnerRecord。这些只会在所有权变更时填充。
  • 我也有同样的问题。许多答案说您应该在车辆模型中使用 personID 而不是 Person 实例,但是这个例子呢:车辆有乘客数组 = Person[]。 Then 不仅仅是一个 ID。

标签: angular typescript angular5 circular-dependency


【解决方案1】:

我不确定您是否以正确的方式使用模型。

鉴于这个(简化的)模型

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;
}

如果您想查看车辆的所有权,则无需访问任何车辆属性。您在记录中拥有您想要的所有内容,即绑定到车辆的用户。

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

如果您想显示用户的车辆列表,同样,您有相应的记录。只需显示与此人匹配的车辆列表。

如果您遵循这一点,您将没有循环依赖。

【讨论】:

  • 我明白你想说什么,我稍后会更新我的问题,以便更好地定义我的模型以避免任何混淆
猜你喜欢
  • 2018-07-22
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多