在c ++中设计数据集并支持类扩展OO方法

时间:2012-05-26 01:05:53

标签: c++

我目前正在开展一个项目,并且设计出现了一些问题。 我有一个名为Key的类,它由几个Fields组成。这个Field课程是一个母班,他们的儿子如Age,Name等实现了Field。在Key类中,有一个属性,它是一个Fields数组,用于存放不同类型的Fields。

class Key {
private:
Field * fieldList;

}

我正在一个团队工作并且设计选择出现了我无法防守,因为我不知道如何回答以下问题......或者可能缺乏它?我相信你能够对此敞开心扉。

此Key类的目的是保存多个字段。这个类的存在是因为我将处理这种数据。

(姓名,年龄......)

这就是我认为它看起来已经实现的方式:

Key myKey = Key();
Age newAge = Age(50);
myKey.add(newAge);

这就是Key类的add方法的原型:

void Key::add(Field);

正如您可能已经假设的那样,由于Key类有一个Field数组,这个方法接收一个Field,因为Age也是Field,继承的原因,然后这就像一个魅力。可以说Name类和将来可能会出现的其他类。

这与在数据库中具有数据的行且列属于属性的想法相同,因此同一列具有相同类型的属性。

我们还希望仅使用其中一个字段来比较2个键,例如:

我们说我有2个关键数据:

(John,50)< - myKey1

(保罗,60岁)< - myKey2

我这样做的方法如下:

myKey1.compareTo(myKey2, 2)

如果第一个myKey1的第二个属性大于,等于或小于第二个myKey2上的第二个属性,则会回答。

这有问题。当我使用add方法时,我随机添加了不同类型的Field,比如Age first,然后是Name second,等等到Key对象。我的Key对象按照外观顺序将它们添加到它的内部数组中。 因此,当我使用compareTo方法时,没有任何东西可以保证在两个对象内部,它们的数组的第二个元素将有一个字段说,名称字段,因此如果不是这样,它可能是比较名称与Age,因为它只包含一个Field的数组,只要Key类知道它就是相同的类型。

这是我解决方案的方法,但我无法回答的是,如何解决这个问题。

我团队的另一位成员提议,我们为每个现有字段的密钥类实现一个方法,即:

myKey.addAge(newAge);
myKey.addName(newName);

在里面它仍然会有Field数组,但是这次,类可以向你保证Age会进入数组的第一个位置,而Name会进入数组的第二个位置,因为每个方法都会肯定的。

明显的问题是,我必须为每种类型的Field添加一个方法。这意味着,如果将来我希望添加说法"出生日期"所以创建新的Date类,我必须添加一个方法addDate,依此类推...... 我的团队成员给我的另一个原因是,"我们不能相信外部用户他会按照他们应该订购的方式添加字段"指出为什么我的做法很糟糕。

总结如下:

  • 在第一种方法中,Key类依赖于添加了Fields的程序员,以确保它们具有应该的顺序,但作为一种好处,无需为每种类型的字段添加方法。

  • 在第二种方法中,Key类通过为每种类型的Field实现一个方法来确保顺序是正确的,但是,通过创建的每种类型的新Field,类会变得更大更大。

有这个想法吗?有解决方法吗?

提前致谢,如果我不清楚,我会道歉,如果需要,我会添加新的详细信息。

1 个答案:

答案 0 :(得分:0)

扩展@tp1在Field类和枚举中对ID字段的出色想法,实际上可以使它非常灵活。如果您愿意将字段类型的数量限制为32,则甚至可以将一组标志作为CompareTo中的ID。然后您可以同时比较多个字段。这种方法有意义吗?