2012-04-02 29 views
4

对于一个学校任务,我必须创建一个C++程序来创建和管理包含学生和本科学生的二进制平面文件数据库。本科生基本上和普通学生一样,但有一些附加领域。给出的提示是我们可以使用模板。数据库的最佳面向对象设计

我的问题是在构造这个设计。我已经试过如下:

  • 创建包含string变量与studentundergrad类继承它并添加更多的变量字段Person类。这工作,但它变得非常难以加人更多类型以后,所以我尝试:
  • 创建Person类,它包含一个map<string, string>从那些添加UndergradStudent继承,以及含有vector<Person>一个database类。在Person::map<string, string>我添加了不同的字段和它们的值,如名称,地址等。

我不确定我是否正确地使用此方法。有没有标准的设计模式用于这样的事情?

+5

关闭投票人,你在想什么? – GolezTrol 2012-04-02 15:38:20

+0

@Golez - 来吧,“数据库的最佳设计是什么?”。 – 2012-04-02 17:22:40

+0

@BoPersson我知道这不是一个明显的答案,但我认为如果我从社区征求意见,我可以从这个任务中学到更多东西,而不是只用完成第一个解决方案的课程。回想起来,虽然我可以选择一个更好的标题,是的。 – 2012-04-02 17:33:23

回答

2

正确的方法更多取决于你需要系统做什么。如果您知道系统将专门针对您列出的要求并希望获得更好的运行时性能,那么您的第一种方法是更标准的C++体系结构。

地图的方式可以让你实现一个更通用的方法,但代价是清晰,专门的访问器,所以我猜测它是而不是你的老师正在寻找的方法。

如果您知道系统的所有要求(将进行什么样的查询,预期会支持什么等),它会更好地告知您的决定,因此您应该清楚明确。

祝你好运!

2

请注意“继承”的类层次结构。大多数情况下,如果存在“Liskov替换原则”,即只有在不知道真实类型是什么的情况下,才可以使用名为“person”的对象并调用该函数。

请注意,Liskov是一位女性,并在80年代初出版这个原则,我认为。