首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是最好有两个构造函数,还是应该将它们合并为一个?

是最好有两个构造函数,还是应该将它们合并为一个?
EN

Stack Overflow用户
提问于 2019-09-12 15:05:02
回答 2查看 100关注 0票数 1

我的项目中有两个建设者。第一个是关于健身房的信息,第二个是健身房里所有的私人教练。

看上去像这样

代码语言:javascript
运行
复制
class Gym {
    constructor (
        id,
        name,
        GymId,
        address,
        imageUrl,
        description
    ) 
}

class Trainer {
    constructor (
        id,
        name,
        gymID,
        yearsExperience,
        Gender,
        description,
        imageUrl
    )
}

我把训练员和健身房联系起来,检查健身房是否相等。我的问题是,最好是把教练的数据嵌套在体育课上。所以我的体育课会有一个额外的财产,像trainers。我的数据可能如下所示:

代码语言:javascript
运行
复制
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'}, {...}, {...}]
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-12 18:34:34

我认为这里有两个独立的问题:

(1)我应该使用带有构造函数的类,还是只使用对象文本{id: 0, name: "Jim", gymID: 0, ...}

我认为有一个相当清楚的答案:当您有几个相同类型/形状的对象时,您应该使用一个类,而该类应该有一个构造函数。(可以说,这在某种程度上是自以为是的,但我认为这是相当没有争议的。)

(2)在GymTrainer的具体情况下,Gym类是否应该有一个Trainer列表的属性?

这是一个真正取决于应用程序需求的设计决策,我认为不可能给出一个大致的答案。如果您经常遇到这样的情况,即您有一个gym实例,并且希望迭代它的训练器,那么让这个列表预先填充比过滤所有健身房的所有训练者的庞大的全球列表更有效。如果你经常将训练员重新分配到不同的健身房,那么只需要更新一个属性就比找到两个健身房和将培训员实例从一个列表中删除并添加到另一个列表中更容易和更快。

如果您决定了一个培训者列表,您仍然可以使用Gym构造函数填充它。然后,Trainer类可能需要也可能不需要gymID字段,这取决于您是否需要它。具有这两个功能的示例代码:

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2019-09-12 18:47:24

我想你误解了构造函数是什么。为了直接回答你的问题,你不应该把它们分开。为什么?因为它们本质上是两个不同的物体。

因为它们是两个不同的对象,所以它们需要自己的构造函数。因为构造函数的任务是简单地初始化对象,而不是其他任何东西。

Jmrk的解决方案是对的。您可以简单地创建培训师类,并创建一个培训员列表,然后将培训师列表传递给Gym对象。在Gym对象中,确保构造函数包含一个训练器列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57909628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档