我目前正在开展一个项目,并且设计出现了一些问题。 我有一个名为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,类会变得更大更大。
有这个想法吗?有解决方法吗?
提前致谢,如果我不清楚,我会道歉,如果需要,我会添加新的详细信息。
答案 0 :(得分:0)
扩展@tp1在Field类和枚举中对ID字段的出色想法,实际上可以使它非常灵活。如果您愿意将字段类型的数量限制为32,则甚至可以将一组标志作为CompareTo
中的ID。然后您可以同时比较多个字段。这种方法有意义吗?