Angular 将NGXS状态分解为更小的可维护部分,但使它们彼此可访问的最佳方法是什么?
问题简史: 我正在为开发web助手,所以目标是在NGXS中存储单个游戏。这是 游戏内容包括:Angular 将NGXS状态分解为更小的可维护部分,但使它们彼此可访问的最佳方法是什么?,angular,typescript,ionic4,ngxs,Angular,Typescript,Ionic4,Ngxs,问题简史: 我正在为开发web助手,所以目标是在NGXS中存储单个游戏。这是 游戏内容包括: 球员名单 过去的天数列表(从0到大约5天(通常)) 每天有三个阶段:晚上>白天>投票 为了维持这个复杂的日结构并记录所有玩家的动作,我需要大量的动作,所以当GameState开始变得庞大时,我尝试将其分解为子状态。在这里,我遇到了循环依赖问题 事实上,通过阅读以下内容,我设法解决了这个问题: 我创建了CurrentDayState和PlayersState作为子状态,但在这种情况下,这似乎是一种不好
GameState
开始变得庞大时,我尝试将其分解为子状态。在这里,我遇到了循环依赖问题
事实上,通过阅读以下内容,我设法解决了这个问题:
我创建了CurrentDayState
和PlayersState
作为子状态,但在这种情况下,这似乎是一种不好的方法,因为这样:
- 我只能直接访问状态,此时仍然无法访问具有复杂逻辑的选择器
- 我只存储当前日期和当前投票,然后在
中将它们放入days数组中,如果游戏主机需要检查一些信息,则很难实现返回到前几天GameState
GameState
中存储所有操作,但这样.ts文件将占用大约800行,对我来说这似乎是个坏主意
问题: 有没有办法使NGXS状态模块化,但让它的每个部分都从另一个部分访问选择器,而不会遇到循环依赖问题?
(阅读已经意味着问题,NGXS子状态应该是相互独立的,并且不应该相互控制) < P>一种方法是将每个存储区看作数据库表和每个新的状态作为表中的新记录/行写入。规范化你的模型,你可以有一个播放器商店和一个日间商店。如果您需要某一天的天数和玩家状态的整个历史记录,您可以不断插入新状态,而不是更新当前状态。玩家可能需要一个属性来指示给定状态的时间(比如指向关联的日状态的外键) 如果这是一项业务需求,则可以编写选择器以获取当前状态或查找游戏历史中给定时间内的给定状态。关于选择器的ngxs文档提到将不相关的状态加入到选择器中。您可以考虑使用这些选择器将相关的播放器和日间状态一起加入给定的查找需求。 编辑1: 规范化数据和存储快照解决了您提到的关于完整游戏历史记录和维护更多管理状态的双重问题 对于在没有循环依赖的情况下维护不同状态的特定问题,应该避免将两个文件相互导入。有两种方法可以在我脑海中处理这个问题:
export class DaysState{
@Selector([DaysState, PlayersState])
static getGameState(days, players) {
return [...days, ...players];
}
}
谢谢你的回答!为历史存储快照似乎是个好主意,但我并没有真正了解规范化模型如何帮助我解决循环依赖性问题。