我的项目中有两个建设者。第一个是关于健身房的信息,第二个是健身房里所有的私人教练。
看上去像这样
class Gym {
constructor (
id,
name,
GymId,
address,
imageUrl,
description
)
}
class Trainer {
constructor (
id,
name,
gymID,
yearsExperience,
Gender,
description,
imageUrl
)
}
我把训练员和健身房联系起来,检查健身房是否相等。我的问题是,最好是把教练的数据嵌套在体育课上。所以我的体育课会有一个额外的财产,像trainers
。我的数据可能如下所示:
new Gym (
0,
'Fitness First',
0,
'some random address',
'image link'
'This is a cool gym'
[{id: 0, name: Jim, 0, 10, Male, 'Good Guy', 'imageURL'}, {...}, {...}]
)
发布于 2019-09-12 18:34:34
我认为这里有两个独立的问题:
(1)我应该使用带有构造函数的类,还是只使用对象文本{id: 0, name: "Jim", gymID: 0, ...}
我认为有一个相当清楚的答案:当您有几个相同类型/形状的对象时,您应该使用一个类,而该类应该有一个构造函数。(可以说,这在某种程度上是自以为是的,但我认为这是相当没有争议的。)
(2)在Gym
和Trainer
的具体情况下,Gym
类是否应该有一个Trainer
列表的属性?
这是一个真正取决于应用程序需求的设计决策,我认为不可能给出一个大致的答案。如果您经常遇到这样的情况,即您有一个gym
实例,并且希望迭代它的训练器,那么让这个列表预先填充比过滤所有健身房的所有训练者的庞大的全球列表更有效。如果你经常将训练员重新分配到不同的健身房,那么只需要更新一个属性就比找到两个健身房和将培训员实例从一个列表中删除并添加到另一个列表中更容易和更快。
如果您决定了一个培训者列表,您仍然可以使用Gym
构造函数填充它。然后,Trainer
类可能需要也可能不需要gymID
字段,这取决于您是否需要它。具有这两个功能的示例代码:
class Gym {
constructor(id, name, ..., trainers) {
this.id = id;
// ...
this.trainers = trainers;
for (let trainer of trainers) {
trainer.gymId = this.id;
}
}
}
let trainers = [
new Trainer(0, "Jim", ...),
new Trainer(1, "Mary", ...)];
let gym = new Gym(0, "Fitness First", ..., trainers);
发布于 2019-09-12 18:47:24
我想你误解了构造函数是什么。为了直接回答你的问题,你不应该把它们分开。为什么?因为它们本质上是两个不同的物体。
因为它们是两个不同的对象,所以它们需要自己的构造函数。因为构造函数的任务是简单地初始化对象,而不是其他任何东西。
Jmrk的解决方案是对的。您可以简单地创建培训师类,并创建一个培训员列表,然后将培训师列表传递给Gym对象。在Gym对象中,确保构造函数包含一个训练器列表。
https://stackoverflow.com/questions/57909628
复制相似问题