【发布时间】:2018-03-27 05:58:25
【问题描述】:
一直在研究一个模型之间存在循环依赖关系的项目。 我给了this StackOverflow post 并阅读了它的解决方案,但由于它表明循环依赖通常是混合问题的情况,我认为我的情况不属于该类别。
因此,虽然它们只是警告,但我想我会询问这是否是处理以下场景的不正确方法:
链接模型
您有 3 个模型:
-
一个人
public class Person{ Id: number; Name: string; Vehicles: Vehicle[]; } -
车辆
public class Vehicles{ Id: number; Model: string; CurrentOwnerId: number; CurrentOwner: Person; OwnerRecords: OwnerRecord[]; } -
所有者记录
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 显然有 Person 和 Vehicle 属性。
车辆的当前所有者不会有 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