Inheritance 如何在平坦的Redux存储中保留继承信息?
我在React应用程序中使用Redux进行状态管理。我还打算“扁平化”任何API响应,以鼓励重用并减少状态树中的数据重复。我希望用它来实现这一目标 我的问题是关于管理对象之间关系的首选方法,特别是继承类型关系 应用程序向API发出请求(后端用Java编写,Spring)。已定义的域模型包括以下关系:Inheritance 如何在平坦的Redux存储中保留继承信息?,inheritance,reactjs,redux,Inheritance,Reactjs,Redux,我在React应用程序中使用Redux进行状态管理。我还打算“扁平化”任何API响应,以鼓励重用并减少状态树中的数据重复。我希望用它来实现这一目标 我的问题是关于管理对象之间关系的首选方法,特别是继承类型关系 应用程序向API发出请求(后端用Java编写,Spring)。已定义的域模型包括以下关系: interface NamedThing { int getId(); String getName(); } interface Pet extends NamedThing {
interface NamedThing {
int getId();
String getName();
}
interface Pet extends NamedThing {
Person getOwner();
}
class Cat implements Pet {
int getId() {
...
};
String getName() {
...
};
Person getOwner() {
...
};
int getNumberOfLivesRemaining() {
…
};
}
class Dog implements Pet {
int getId() {
...
};
String getName() {
...
};
Person getOwner() {
...
};
int getAgeInDogYears() {
…
};
}
class Person implements NamedThing {
int getId() {
...
};
String getName() {
...
};
}
对/pets端点的GET请求的响应可能如下所示:
[{
id: 1,
type: ‘cat',
name: ‘Fluffy',
owner: {
id: 1,
name: ‘Mary'
},
numberOfLivesRemaining: 9
},
{
id: 2,
type: ‘dog',
name: ‘Ralph',
owner: {
id: 1,
name: ‘Mary'
},
ageInDogYears: 10
}]
在定义了正确的模式后,normalizer将平坦化对以下内容的响应:
{
result: [
{id: 1, schema: ‘cats’},
{id: 2, schema: ‘dogs’}
],
entities: {
cats: {
1: {
id: 1,
type: ‘cat’,
name: ‘Fluffy’,
owner: 1,
numberOfLivesRemaining: 9
}
},
dogs: {
2: {
id: 2,
type: ‘dog',
name: ‘Ralph',
owner: 1,
ageInDogYears: 10
}
},
persons: {
1: {
id: 1,
name: ‘Mary’
}
}
}
}
方法1:
在应用程序状态下,不同的实体(猫、狗和人)可以存储在类似命名的集合中。然而,我会丢失猫和狗是宠物的细节,这是我打电话给宠物终端后知道的
方法2:
我可以将所有宠物实体存储在宠物集合中,并将所有猫的ID和所有狗的ID存储在单独的集合中。然后,我可以通过使用mapStateToProps函数进行相应过滤,将所有猫、所有狗或所有宠物传递到一个组件中
但是,如果我向/namedThings端点发出GET请求,我将返回猫、狗和人,并将它们存储在namedThings集合中,其中包含猫、狗和人的ID集合。但是,同样,我不知道猫和狗也是宠物,因为这些信息不包含在API响应中
为了解决这个问题,我可以:
使用Redux和normalizer时,表示这种类型的实体层次结构的最佳方法是什么?其他团队是如何解决这个问题的?这两种方法听起来都不错:
您应该同时尝试这两种方法,看看什么对您的应用程序更有意义。感谢您的回复,Dan和Redux等人!明确地说,建议是:;2.将每个实体类型存储在单独的集合和3中。将所有命名的子类实体存储在单个集合中。在Redux中存储这样的实体是否有首选方法?您能否建议这两种方法的优缺点,或者提供一些标准来评估哪种方法最适合我的应用程序?i、 测试和性能的含义是什么?我看不出有什么重要的区别。我无法评估什么是最好的,因为我没有看到UI、数据模型、需求等。