强烈建议将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值即可。有没有想到哪个方向最可维护/最直接,或者是更好的表示方式?