1

强烈建议扁平化 ngrx 商店的状态树,我在整个应用程序中都在努力这样做。我理解并同意这样做背后的原因——扁平状态树更易于管理、深度复制等。

但是,我遇到了一个场景,让我想知道设置状态树的最可维护的方式。我有一个功能,Crews其中包含一个 Crew 中的许多用户。工作人员的一个实例可以有替代用户(例如,如果该工作人员中的某个人不可用)。Asub简单地定义了原始用户 ID 和替换用户 ID。据我所知,有两种方法可以做到这一点。最直接的方法是使用非扁平结构——可能看起来像这样:

export interface User {
  id: string;
  username: string;
}

export interface Crew {
  id: string;
  members: string[];         //User IDs
  subs: [string, string][];  //[Orig UID, Sub UID]
}

export interface UserState extends EntityState<User> { }
export interface CrewState extends EntityState<Crew> { }

export interface AppState {
    users: UserState;
    crews: CrewState;
}

另一种选择是创建一个Subs特征,其中的 subsCrew将指向 subs 中的一个 id:

export interface User {
  id: string;
  username: string;
}

export interface Crew {
  id: string;
  members: string[];        //User IDs
  subs: string[];           //Sub ID
}

export interface Sub {
  id: string;
  original: string;         //Original UID
  sub: string;              //Sub UID
}

// Using ngrx entities
export interface UserState extends EntityState<User> { }
export interface CrewState extends EntityState<Crew> { }
export interface SubState extends EntityState<Sub> { }

export interface AppState {
    users: UserState;
    subs: SubState;
    crews: CrewState;
}

但这对我来说似乎有点矫枉过正——创建一个全新的功能,只是为了表示两个字符串 ID 值。任何关于哪个方向最可维护/最直接的想法,或者更好的方式来表示这一点?

4

0 回答 0