角5-圆形依赖性



一直在研究一个在模型之间具有循环依赖性的项目。我给了这个stackoverflow帖子,它的解决方案是阅读的,但是这表明循环依赖性通常是一种混乱的情况,我认为我的情况不会属于该类别。

所以当它们只是警告时,我想我会询问这是否是我以下情况的不正确方法:

链接模型

您有3种型号:

  1. a

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

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

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

一个人可以拥有车辆。车辆的当前所有者由车辆上的当前downerid场给出。自我搜索是一个可以代表历史所有权数据的链接表,从而将车辆与人联系起来。

用例

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

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

OwnerRecords显然具有PersonVehicle属性。车辆的当前所有者将没有OwnerRecord,因为仅在更改所有者时就会填充它们,因此这纯粹适用于历史所有者的记录。

解释

当然,这在知道循环依赖性将永远不会实现的前提是我从后端取回这些对象的前提是不正确的吗?

在构建时间没有任何警告的情况下,还有什么可以这样做?

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

给定此(简化(模型

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

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

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

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

如果您遵循此操作,那么您的情况就不会有循环依赖性。

最新更新