ngrx状态-何时将状态展平?

时间:2018-07-12 14:52:22

标签: angular ngrx flatten ngrx-store ngrx-entity

强烈建议将ngrx商店的状态树展平,我已经在整个应用程序中做到了这一点。我理解并同意这样做的原因-简化状态树易于管理,深度复制等。

但是,我遇到了一个场景,使我想知道设置状态树的最可维护的方法。我有一个功能Crews,其中包含乘员组中的许多用户。乘员组实例可以具有替代用户(例如-如果该乘员组中的某人不可用)。 sub仅定义原始用户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功能,Crew中的subs将指向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值即可。有没有想到哪个方向最可维护/最直接,或者是更好的表示方式?

0 个答案:

没有答案